Условие задачи:
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:
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)]
Другими словами, если дано:
То:
[[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]]
Буду признателен за помощь.