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
(或者a
或b
或c
),则会看到它满是{...}
因为任何两个angular都指向彼此。
据我所知,这是一个固定点的例子
p = [1, 2] p[1:1] = [p] f = lambda x:x[1] f(p)==p f(f(p))==p
该特殊对象的名称是省略号。 我猜它是作为一个Python的intepreter /虚拟机中的单例对象来实现的 – 就像None–一个类似的哨兵。 正如你所看到的那样,这是一种Python代表本身列表引用的方式。