我只想将[1]附加到主列表树的第一个列表元素中,但[1]会附加到每个列表元素。
tree = [[]] * 5
tree[0].append([1])
print tree
>>>[[[1], [1], [1], [1], [1]]]
我想要的是什么:
>>>[[[1]],[],[],[],[]]
答案 0 :(得分:0)
您创建列表的方式(tree = [[]] * 5
)就是问题所在。列表中的所有5个列表都是相同的对象,使用方法id()
时可以看到:
>>> tree = [[]] * 5
>>> id(tree[0])
139859652123032
>>> id(tree[1])
139859652123032
解决方案是:
>>> tree = [[], [], [], [], []]
>>> tree[0].append([1])
>>> tree
[[[1]], [], [], [], []]
答案 1 :(得分:0)
我的问题是乘以*会创建相同元素的引用。我应该使用:
tree = [[] for i in xrange(5)]
答案 2 :(得分:0)
使用for语句迭代并添加每个分支
tree = [[] for i in xrange(5)]
# xrange() and range() will have the same result, but the former is a cheaper iterator
最后,将'[1]'附加到第一个列表
tree[0].append([1])