Python列表中的省略号是什么?

我正在玩python。 我在IDLE中使用了下面的代码

p = [1, 2] p[1:1] = [p] print p 

输出是

 [1, [...], 2] 

这是什么 […]? 有趣的是,我现在可以使用这个列表的列表直到无穷大ie

 p[1][1][1].... 

只要我愿意,我可以把上面的内容写出来,它仍然可以工作。

编辑:

  • 在内存中如何表示?
  • 它有什么用途? 一些有用的例子会有帮助。
  • 任何官方文件的链接将是非常有用的。

这意味着你创build了一个嵌套在其内部的无限列表,无法打印。 p包含p ,其中包含p …等等。 符号是一种让您知道这一点的方法,并通知它不能被表示! 看看@ 6502的答案,看看发生了什么事情的一个不错的图片。

现在,关于编辑后的三个新项目:

  • 这个答案似乎覆盖了它
  • Ignacio的链接描述了一些可能的用途
  • 与编程语言相比,这更像是一个数据结构devise的主题,所以在Python官方文档中找不到任何引用

这是你的代码创build的

在这里输入图像说明

这是一个列表,其中第一个和最后一个元素指向两个数字(1和2),中间元素指向列表本身。

在Common Lisp中,打印圆形结构时启用这样的对象将被打印为

 #1=#(1 #1# 2) 

这意味着有一个对象(标有1, #1= )是一个具有三个元素的向量,第二个是对象本身(用#1#反向引用)。

在Python中,您只需获取结构与[...]循环的信息。

在这个特定的情况下,描述是不含糊的(它是向后指向一个列表,但只有一个列表,所以它必须是一个)。 在其他情况下,可能是不明确的…例如

 [1, [2, [...], 3]] 

向后引用可以是外部列表或内部列表。 以相同的方式打印这两个不同的结构可以创build

 x = [1, [2, 3]] x[1][1:1] = [x[1]] y = [1, [2, 3]] y[1][1:1] = [y] print x, y 

他们将在记忆中

在这里输入图像说明

关于“它有什么用处”的问题,下面是一个具体的例子。

graphics缩减是一种用来解释计算机语言的评估策略。 这是懒惰评估的常用策略,特别是function语言。

起点是build立一个图表,表示程序将采取的“步骤”的顺序。 根据程序中使用的控制结构,这可能会导致一个循环图(因为程序包含某种“永久”循环 – 或者使用recursion的“深度”将在评估时知道,而不是在graphics -创作时间)…

为了表示这样的图,你需要无限的 “数据结构”(有时称为recursion数据结构),就像你注意到的那样。 通常情况下,更复杂一点。

如果你对这个话题感兴趣的话,这里是(其中包括)关于这个话题的一个讲座:
http://undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf

我们在面向对象编程中一直这样做。 如果任何两个对象直接或间接地相互引用,它们都是无限recursion结构(或者是同一个无限recursion结构的一部分,取决于你如何看待它们)。 这就是为什么你不会看到这么简单的东西,因为我们通常比“无限列表”更好地将这个概念描述为相互关联的“对象”。

你也可以用一个无限recursion的字典来获得... 假设你想要一个三angular形的angular的字典,其中每个值是连接到该angular的其他angular的字典。 你可以像这样设置它:

 a = {} b = {} c = {} triangle = {"a": a, "b": b, "c": c} a["b"] = b a["c"] = c b["a"] = a b["c"] = c c["a"] = a c["b"] = b 

现在,如果您打印出triangle (或者abc ),则会看到它满是{...}因为任何两个angular都指向彼此。

据我所知,这是一个固定点的例子

 p = [1, 2] p[1:1] = [p] f = lambda x:x[1] f(p)==p f(f(p))==p 

该特殊对象的名称是省略号。 我猜它是作为一个Python的intepreter /虚拟机中的单例对象来实现的 – 就像None–一个类似的哨兵。 正如你所看到的那样,这是一种Python代表本身列表引用的方式。