无法通过迭代器设置数组值

时间:2014-05-13 14:14:18

标签: python arrays python-3.x

使用python 3.4

ranks = [[0 for y in range(0,len(graph))] for x in range(0,iterSites)]
for site in ranks[0]:
    site = 2
print(ranks)

输出:

[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]

为什么“site = 2”没有将rank [0]的每个值都设置为2?

3 个答案:

答案 0 :(得分:1)

site是一个局部变量,其值不会分配给列表的值。更改代码如下所示:

ranks = [[0 for y in range(0,len(graph))] for x in range(0,iterSites)]
for site in range(len(ranks[0])):
    ranks[0][site] = 2
print(ranks)

答案 1 :(得分:1)

因为网站是排名[0] [x]的副本而不是真实值。你需要做的是:

for site in range(len(ranks[0])):
    ranks[0][site] = 2
print(ranks)

答案 2 :(得分:0)

首先,当您需要更新site = 2

时,您正在执行rank

第二个ranks[0]是列表而非列表中的单元格,因此您的迭代不正确。

您可以按如下方式更改代码:

ranks = [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]

for idx, value in enumerate(ranks[0][:]):
    ranks[0][idx] = 2

print ranks

<强>输出:

[[2, 2, 2, 2, 2, 2, 2], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]