Найти - Пользователи
Полная версия: Создание list of tuples с помощью стандартного for loop
Начало » Python для новичков » Создание list of tuples с помощью стандартного for loop
1
Kurtz
>>> 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?
Shaman
list.append поможет.
Kurtz
Чтобы избежать 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')]
py.user.next
>>> 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')]
>>>
Kurtz
Спасибо.
Kurtz
Условие задачи:
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]]
Буду признателен за помощь.
py.user.next
Kurtz
Для этого я попытался воспроизвести мое решение через стандартные for loops, но у меня ничего не вышло:
Забыл почистить список l1 после каждого добавления в l2.
Kurtz
py.user.next
Забыл почистить список l1 после каждого добавления в l2.
l1 изначально неправильный:
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8]
Весь for loop который я написал скорее всего неправильный.
py.user.next
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]]
>>>
Kurtz
Спасибо большое!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB