首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -返回[[.],6]的列表

Python -返回[[.],6]的列表
EN

Stack Overflow用户
提问于 2019-01-06 15:33:42
回答 2查看 305关注 0票数 14

如果我运行以下代码

代码语言:javascript
复制
data = [[1,2],[3,4],[5,6]]

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

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

我得到以下输出

代码语言:javascript
复制
1
3
5
[[1, 2], 6]
[[3, 4], 6]
[[...], 6]

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

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

代码语言:javascript
复制
>>> print(y)
[[Ellipsis], 6]

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

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

代码语言:javascript
复制
>>> print(x)
[[...], 6]

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

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

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

但不知怎么的,这两种情况都导致了6

代码语言:javascript
复制
>>> print(x[1])
6

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-06 15:42:04

让我们给出您的子列表名称:

代码语言:javascript
复制
a = [1, 2]
b = [3, 4]
c = [5, 6]
data = [a, b, c]

第一个循环将abc依次绑定到x。当循环结束时,您已经有效地设置了x = c

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

票数 11
EN

Stack Overflow用户

发布于 2019-01-06 15:37:45

这是因为您使用x[0]作为循环变量(这是不好的实践),它作为列表存在,而不是像使用for迭代时应该使用的新名称那样存在。

代码语言:javascript
复制
for x[0] in data:
    print(x)

xdata中,因此有一个循环引用(因此,当反复打印相同的数据时,ellipsis representation可以避免无限递归)

更详细

省略发生在最后一个元素上,因为前面的循环将x绑定到data ([5,6])的最后一个元素上。

因此,第二个循环将[5,6]分配给x[0],但它也是x。要摆脱这个问题,就要在第二个循环:x之前创建一个x = x[:]的副本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54063064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档