【发布时间】:2015-11-01 15:29:30
【问题描述】:
我希望随机生成一个列表并更改列表中的一个元素以创建一个新列表。同时跟踪所有生成的列表。
例如:
values_possible = [0,0.5,1]
combinations = []
combinations.append([random.choice(values_possible) for i in range(8)])
让我们说这会产生
[0,0.5,0.5,0,0.5,0.5,1.0,1.0]
如果我复制这个列表并更改一个元素,比如组合[1][1]
# set a new list to equal the first and then change one element
combinations.append(combinations[0])
combinations[1][1] = 0.33
print(combinations[0])
print(combinations[1])
返回
[0,0.33,0.5,0,0.5,0.5,1.0,1.0]
[0,0.33,0.5,0,0.5,0.5,1.0,1.0]
似乎combinations[0][1] 和combinations[1][1] 都变成了0.33。有没有办法解决这个问题?请问为什么会发生这种情况以及我对列表有什么误解?我期望得到以下输出:
[0,0.5,0.5,0,0.5,0.5,1.0,1.0]
[0,0.33,0.5,0,0.5,0.5,1.0,1.0]
【问题讨论】:
-
combinations.append([random.choice(values_possible) for i in range(8)])生成[[0,0.5,0.5,0,0.5,0.5,1.0,1.0]]。那是因为append将一个元素附加到列表中。在这种情况下,元素是一个列表。请改用.extend,否则,如果这是您想要得到的,请更正错字并在生成的列表周围添加[]