我有以下代码段:
d = [[0,558,437,142,45,290], [558,0,232,500,600,523], [437,232,0,408,492,572],
[142,500,408,0,180,197], [45,600,492,180,0,254], [290,523,572,197,254,0]]
for row in d:
for elem in row:
elem = elem * 2
print d[0][1]
print '\n'
为什么不打印新值,它仍会打印558
答案 0 :(得分:5)
elem = elem * 2
修改名为elem
的变量的值。此变量与列表无关,而是与列表元素的初始值无关。
要做你想做的事,你需要索引到数组中。或者,您可以使用map()
功能。但是,这只会创建一个包含新值的新列表,而不是更改原始列表的值。
答案 1 :(得分:3)
您正在为变量elem
分配新值。这不会影响列表。相反,试试这个:
d = [[0,558,437,142,45,290], [558,0,232,500,600,523],
[437,232,0,408,492,572],
[142,500,408,0,180,197], [45,600,492,180,0,254], [290,523,572,197,254,0]]
for row in d:
for index in range(len(row)):
row[index] *= 2
print d[0][1]
print '\n'
请注意,我使用index
作为元素的索引,而不是访问元素本身。
答案 2 :(得分:2)
除了在其他答案中提到的“为什么”之外,以下是如何使用列表推导实现此目的:
d = [[0,558,437,142,45,290], [558,0,232,500,600,523], [437,232,0,408,492,572],
[142,500,408,0,180,197], [45,600,492,180,0,254], [290,523,572,197,254,0]]
for i, el in enumerate(d):
d[i] = [row * 2 for row in el]
print(d)
答案 3 :(得分:2)
你可能想要这样的东西:
double_d = [[elem * 2 for elem in row] for row in d]
使用列表推导是更惯用的Python。