2015-10-18 147 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