Append覆盖所有最后附加值的元素(Python)



我想准备包含所有可能的参数组合的列表,这些组合将在暴力搜索中使用。参数组合应该像这样:

[0,0,1]
[0,0.2, 0.8]
[0.2, 0,0.8]

[0.4, 0.4, 0.2]

[1,0,0]

生成这些列表的代码工作得很好——在每次迭代中打印weights_temp都会返回正确的结果。然而,有一些问题与追加。当我打印weights时,我得到的是这个(最后一个weights_temp值而不是其他元素):

[1.0, 0.0, 0.0]
[1.0, 0.0, 0.0]

[1.0, 0.0, 0.0]

[1.0, 0.0, 0.0]

这是我的代码:

step = 0.2
weights_temp = [0, 0, 1]
weights = [weights_temp]
i = 1
while weights_temp != [1, 0, 0]:
    # decrease gamma
    weights_temp[2] = 1 - i * step
    for j in xrange(0, i + 1):
        # increase alpha, decrease beta
        weights_temp[0] = j * step
        weights_temp[1] = abs(1 - weights_temp[2]) - j * step
        weights.append(weights_temp)
        print weights_temp
    i += 1

有人知道如何解决这个问题吗?

提前感谢

继续我的评论,而不是添加引用,每次添加列表时都创建一个新列表

weights.append([item for item in weights_temp])

的例子:

>>> temp = [1,2,3]
>>> holder = [temp]
>>> holder
[[1, 2, 3]]
>>> temp[0] += 1
>>> holder
[[2, 2, 3]]
>>> holder.append([item for item in temp])
>>> holder
[[2, 2, 3], [2, 2, 3]]
>>> temp[0] +=1
>>> holder
[[3, 2, 3], [2, 2, 3]]

for s in arr:
li.append(
    {"id":s.get("InstanceId"),"Message":s.get("Status").get("Message") }
 )

最新更新