意外的列表追加

2024-06-16 14:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

import random
stats = []
statslist = []
rollslist = []
for var1 in range(4):
    stats.append(random.randrange(1, 7))
rollslist.append(stats)
print(stats)
b = min(stats)
stats.remove(b)
print(sum(stats))
statslist.append(sum(stats))
print(stats)
print(rollslist)
print(statslist)

实际结果

[5, 1, 1, 3]
9
[5, 1, 3]
[[5, 1, 3]]
[9]

预期结果

[5, 1, 1, 3]
9
[5, 1, 3]
[[5, 1, 1, 3]]
[9]

我希望它能为第四个结果打印四个数字,而不是它给我的三个。在号码被删除之前,我把名单加了上去。我错过了什么?你知道吗


Tags: inimportforstatsrangerandomminremove
2条回答

正如Avinash提到的,这是因为您仍然在引用stats列表。也就是说,以后所做的更改(比如删除一个项目)仍然会得到反映。对于预期的行为,您可以make a copy of the list这样:

newCopy = list(stats)
rollslist.append(newCopy)

您添加了一个可变列表。稍后修改时,修改会影响您放置在列表中的对象,因为它是直接引用而不是副本。你知道吗

制作列表副本的最简单方法是使用切片:

rollslist.append(stats[:])

相关问题 更多 >