Python List返回[[…],6]

2021-01-28 07:09:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我运行以下代码

data = [[1,2],[3,4],[5,6]]

for x in data:
    print(x[0])

for x[0] in data:
    print(x)

我得到以下输出

^{pr2}$

最后我得到一个包含[[...], 6]的列表,但是这个[...]列表是什么?在

它的行为不正常,因为调用y = [[...], 6],然后下面的语句将[...]显示为0

>>> print(y)
[[Ellipsis], 6]

>>> print(y[0])
[0]

但是,当我在顶部运行代码并键入以下语句时,结果就没有意义了:

>>> print(x)
[[...], 6]

>>> print(x[0])
[[...], 6]

>>> print(x[0][0])
[[...], 6]

>>> print(x[0][0][0])
[[...], 6]

但这两个结果都是6

>>> print(x[1])
6

>>> print(x[0][1])
6

回顾一下这个问题:这怎么可能,[...]代表什么,顶部的for循环如何创建这样的列表?在

2条回答
网友
1楼 ·

这是因为您使用x[0]作为循环变量(这是一个错误的做法),它是以列表的形式存在的,而不是像在使用for进行迭代时应该使用的新名称

for x[0] in data:
    print(x)

并且xdata中,所以有一个循环引用(因此{a1}可以避免反复打印相同数据时的无限递归)

更多详细信息:

省略号出现在最后一个元素上,因为上一个循环绑定了data[5,6])的最后一个元素上。在

所以第二个循环将[5,6]分配给x[0],但它也是x。解决这个问题的方法是在第二个循环之前创建x的副本:x = x[:]

网友
2楼 ·

让我们给你的子列表命名:

a = [1, 2]
b = [3, 4]
c = [5, 6]
data = [a, b, c]

第一个循环将ab和{}依次绑定到x。当循环终止时,您已经有效地设置了x = c。在

第二个循环现在将ab和{}依次绑定到x[0]。这对于ab来说很好,但是对于c,您实际上在做c[0] = c,创建一个循环引用。因为list能够捕捉到这个,所以它不会尝试打印[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[。。。在

相关问题