首先要做的一件事:不,这不是一个关于为什么
的问题someThing = [[]] * 10
someThing[0] = 1
给出[1,1,1,1,1,1,1,1,1,1]。
我的问题有点棘手: 我做了蠢事:
x, y, z = ([[]] for i in range(3))
现在我分配一个值:
x[0] = 1 # This works fine
现在又来了一个:
x[1] = 2 # This does not work anymore
它给了我一个IndexError:列表赋值索引超出范围。
我该如何使这项工作?如您所见,我想要一个包含3个其他列表的空列表,我可以将值附加到其中。
提前致谢!
答案 0 :(得分:3)
从
开始someThing = [] * 10
someThing[0] = 1
给出[1,1,1,1,1,1,1,1,1,1]
?这是一个索引错误(您无法在不存在的索引处分配),因为实际上是[]*10 == []
。您的代码完全相同(我的意思是索引错误)。这一行
x, y, z = ([[]] for i in range(3))
是
的简短(或不是)x, y, z = [[]], [[]], [[]]
所以x[1]
是索引错误。
答案 1 :(得分:3)
我想要一个空列表,其中包含我可以附加的3个其他列表 值。
您正确陈述的问题是:"我想要一个包含三个空列表的列表" (某些内容不能为空并且同时包含内容)。
如果你想要这样,为什么你这么复杂?直截了当的做法有什么不对:
empty_list = [[], [], []]
如果您有这样的清单,当您执行empty_list[0] = 1
时,您最终得到的是:
empty_list = [1, [], []]
相反,你应该empty_list[0].append(1)
,它会给你:
empty_list = [[1], [], []]
如果要创建任意数量的嵌套列表:
empty_list = []
for i in range(0, 15):
empty_list.append([])
答案 2 :(得分:1)
也许这样的事情可行。
lists = [[] for i in range(3)]
输出结果为:
[[],[],[]]
如果您想访问/添加元素,您可以:
lists[0].append(1)
lists[0].append(2)
lists[1].append('a')
lists[1].append('b')
输出结果为:
[[1, 2], ['a', 'b'], []]
答案 3 :(得分:0)
比较输出:
for i in [[]] * 3:
print id(i)
使用:
for i in ([[]] for j in range(3)):
print id(i)
可能有助于回答您的发现。