2015-10-18 185 views
-3

Q.寫一個需要2位數,X,Y作爲輸入的程序,並生成一個2維的 維數組。數組中第i行第j列的元素值應爲i * j。無法理解python代碼

A.

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 

我想知道什麼是0 multilist = [[0 for col in range(colNum)] for row in range(rowNum)]

+2

您正在創建一個充滿零的列表列表,您是否嘗試打印它? –

+0

你.....我必須創建一個2維列表......唯一的是,我不明白在'multilist = [[0 for col in range(colNum )]爲範圍內的行(rowNum)]' – CodeNoob

+0

'0'是列表中元素的值。 –

回答

-1

意義在列表理解,首先,調用它,說法是將在當前迭代中插入的值位置。 它可能是任何東西,所以它在這裏是零。

這字面翻譯標準:

multilist = [] 
for i in range(rowNum): 
    row = [] 
    for j in range(colNum): 
     row.append(0) 
    multilist.append(row) 

當你閱讀從底部此​​代碼頂級的範圍,所以你的列表理解。外列表的

首先「參數」是:

[0 for j in range(colNum)] 

雖然第一內部列表的「參數」,因此一個項目,是0

所以,這個內部列表被重複的rowNum

[ [inner_list] for i in range(colNum)] 

有這樣做的稍微好一點的辦法:

外一倍
+0

WOW ...... !!感謝您將代碼的複雜性打破爲一個更簡單的代碼......通過這種方式很容易理解:) :) 謝謝您:D – CodeNoob

+0

無需感謝。 :D這就是爲什麼我在這樣。只是爲了提醒你,如果你想讓項目默認爲i * j,則不需要初始化爲零。我還建議你稍後在Python中留下列表推導。首先學好Python。他們很方便,但如果你不確定你在做什麼,你可能會以發電機或其他意想不到的結果結束。 – Dalen