我正在创建列表列表。当我选择特定索引时,它会同时设置多个列表条目。这是怎么回事?
x = []
for i in range(3,6+1,1):
x.append([['','']] * i)
x[0][0][0] = 1
for col in x:
print col
输出:
[[1, ''], [1, ''], [1, '']]
[['', ''], ['', ''], ['', ''], ['', '']]
[['', ''], ['', ''], ['', ''], ['', ''], ['', '']]
[['', ''], ['', ''], ['', ''], ['', ''], ['', ''], ['', '']]
关于为什么不起作用仍然是一个悬而未决的问题......这是一个解决方案,但是......
x = []
for i in range(3,6+1,1):
y = ['','']
tmp = []
for j in range(i):
tmp.append(y[:])
x.append(tmp)
x[0][0][0] = 1
for col in x:
print col
输出:
[[1, ''], ['', ''], ['', '']]
[['', ''], ['', ''], ['', ''], ['', '']]
[['', ''], ['', ''], ['', ''], ['', ''], ['', '']]
[['', ''], ['', ''], ['', ''], ['', ''], ['', ''], ['', '']]
答案 0 :(得分:2)
当您将列表相乘时,会重复使用对象,因此当您修改其中一个对象时,您似乎会修改" all"他们事实上,只有一个内部列表,但它出现在外部列表的多个位置!
>>> x = []
>>> x.append([['','']] * 3)
>>> x
[[['', ''], ['', ''], ['', '']]]
>>> x[0][0][0] = 1
>>> x
[[[1, ''], [1, ''], [1, '']]]
如果单独创建内部列表,以便它们是不同的对象,则不会出现此问题:
>>> x = [[]]
>>> x[0].append(['',''])
>>> x[0].append(['',''])
>>> x[0].append(['',''])
>>> x
[[['', ''], ['', ''], ['', '']]]
>>> x[0][0][0] = 1
>>> x
[[[1, ''], ['', ''], ['', '']]]
如果使用理解创建列表,则还可以避免此问题,例如:
x = [[['',''] for _ in range(3)]]