Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2016 22:28:04

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> tshirts = [(color, size) for color in colors for size in sizes]
>>> tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'),
('white', 'M'), ('white', 'L')]

Подскажите, возможно ли тоже самое сделать не с помощью list comprehensions, а с помощью стандартного for loop?

Отредактировано Kurtz (Апрель 14, 2016 10:55:05)

Офлайн

#2 Апрель 12, 2016 22:45:36

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

list.append поможет.

Офлайн

#3 Апрель 13, 2016 10:56:25

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Чтобы избежать TypeError: append() takes exactly one argument (2 given), нужно было взять два параметра в скобки:

>>> tshirts = []
>>> for color in colors:
...    for size in sizes:
...        tshirts.append((color, size))
...
>>> tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), 
('white', 'M'), ('white', 'L')]

Отредактировано Kurtz (Апрель 14, 2016 10:52:25)

Офлайн

#4 Апрель 14, 2016 02:36:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

>>> import itertools
>>> 
>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> 
>>> list(itertools.product(colors, sizes))
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
>>>



Отредактировано py.user.next (Апрель 14, 2016 02:36:31)

Офлайн

#5 Апрель 14, 2016 16:28:40

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Спасибо.

Офлайн

#6 Июль 8, 2016 14:19:45

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Условие задачи:
Write a program which takes 2 digits as input and generates a 2-dimensional array. The element value in the i-th row and j-th column of the array should be i*j.
Example.
Suppose the following inputs are given to the program:

3, 5
Then, the output of the program should be:
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
Solution:
input_str = raw_input()
dimensions = [int(x) for x in input_str.split(',')]
rowNum = dimensions[0]
colNum = dimensions[1]
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]
for row in range(rowNum):
    for col in range(colNum):
        multilist[row][col]= row*col
print(multilist)

Я решил эту задачу таким образом:
input_str = raw_input()
row, col = [int(x) for x in input_str.split(',')]
[[i*j for j in range(col)] for i in range(row)]
Другими словами, если дано:
3, 5
То:
[[i*j for j in range(5)] for i in range(3)]
И ответ будет:
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
Но мне непонятно как это работает, т.е. как вычисляется i*j до того как известно значение i?
Для этого я попытался воспроизвести мое решение через стандартные for loops, но у меня ничего не вышло:
l1=[]
l2=[]
for i in range(3): 
    for j in range(5): 
        l1.append(i*j)
    l2.append(l1)
Получаем:
[[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8],
 [0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8],
 [0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8]]
Буду признателен за помощь.

Отредактировано Kurtz (Июль 8, 2016 14:31:39)

Офлайн

#7 Июль 8, 2016 15:53:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Kurtz
Для этого я попытался воспроизвести мое решение через стандартные for loops, но у меня ничего не вышло:
Забыл почистить список l1 после каждого добавления в l2.



Офлайн

#8 Июль 8, 2016 18:08:27

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

py.user.next
Забыл почистить список l1 после каждого добавления в l2.
l1 изначально неправильный:
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8]
Весь for loop который я написал скорее всего неправильный.

Офлайн

#9 Июль 9, 2016 01:19:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Kurtz
Весь for loop который я написал скорее всего неправильный.
>>> l1=[]
>>> l2=[]
>>> for i in range(3): 
...     for j in range(5): 
...         l1.append(i*j)
...     l2.append(l1)
...     l1 = []
... 
>>> l2
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
>>>



Офлайн

#10 Июль 9, 2016 13:15:55

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание list of tuples с помощью стандартного for loop

Спасибо большое!

Отредактировано Kurtz (Июль 9, 2016 13:16:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version