Python 列表的列表赋值
首先要说明一点:不,这不是一个关于为什么的问题。
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个其他列表,我可以往里面添加值。
提前谢谢你们!
4 个回答
0
比较一下下面这两段代码的输出:
for i in [[]] * 3:
print id(i)
和:
for i in ([[]] for j in range(3)):
print id(i)
可能会帮助你找到答案。
2
也许可以试试这样的方法。
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
从什么时候开始
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]
就是一个索引错误。
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([])