为什么Python不操纵这个数组?

时间:2016-02-02 21:21:35

标签: python arrays

我有以下代码段:

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

4 个答案:

答案 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。