Ase*_*sal 189 python list ellipsis python-2.7 python-3.x
我在蟒蛇玩耍.我在IDLE中使用了以下代码:
p = [1, 2]
p[1:1] = [p]
print p
Run Code Online (Sandbox Code Playgroud)
输出是:
[1, [...], 2]
Run Code Online (Sandbox Code Playgroud)
这是什么[…]
?有趣的是,我现在可以将其用作无限列表列表,即
p[1][1][1]....
Run Code Online (Sandbox Code Playgroud)
只要我愿意,我就可以写上面的内容,但它仍然有用.
编辑:
650*_*502 311
这是您的代码创建的
它是一个列表,其中第一个和最后一个元素指向两个数字(1和2),中间元素指向列表本身.
在Common Lisp中,当启用打印圆形结构时,这样的对象将被打印为
#1=#(1 #1# 2)
Run Code Online (Sandbox Code Playgroud)
意味着有一个对象(标记为1 #1=
)是一个具有三个元素的向量,第二个是对象本身(反向引用#1#
).
在Python中,您只需获得结构为圆形的信息[...]
.
在这种特定情况下,描述不是模糊的(它向后指向一个列表,但只有一个列表,所以它必须是那个).在其他情况下可能会有歧义......例如在
[1, [2, [...], 3]]
Run Code Online (Sandbox Code Playgroud)
向后引用可以指向外部列表或内部列表.可以使用相同的方式打印这两种不同的结构
x = [1, [2, 3]]
x[1][1:1] = [x[1]]
y = [1, [2, 3]]
y[1][1:1] = [y]
print(x)
print(y)
Run Code Online (Sandbox Code Playgroud)
他们会像记忆一样
Ósc*_*pez 107
这意味着您创建了一个嵌套在其自身内的无限列表,无法打印.p
包含p
哪个包含p
......等等.该[...]
符号是一个方法,让你知道这一点,并通知它不能代表!看看@ 6502的答案,看看一张漂亮的图片,展示正在发生的事情.
现在,关于编辑后的三个新项目:
Syl*_*oux 22
关于"它的用途是什么"这个问题,这是一个具体的例子.
图形缩减是一种用于解释计算机语言的评估策略.这是懒惰评估的常用策略,尤其是函数式语言.
起点是构建一个图表,表示程序将采取的"步骤"顺序.根据该程序中使用的控制结构,这可能会导致循环图(因为程序包含某种"永久"循环 - 或者使用递归,其"深度"将在评估时知道,但不会在图形 -创作时间)...
为了表示这样的图形,您需要无限的 "数据结构"(有时称为递归数据结构),就像您注意到的那样.通常,虽然有点复杂.
如果您对该主题感兴趣,请参阅(以及其他许多人)关于该主题的讲座:http:
//undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf
我们一直在面向对象编程中这样做.如果任何两个对象直接或间接地相互引用,它们都是无限递归结构(或者是同一个无限递归结构的两部分,具体取决于你如何看待它).这就是为什么你没有在列表中看到这么多原因 - 因为我们通常最好将概念描述为互连的"对象"而不是"无限列表".
您还可以...
使用无限递归字典.假设您想要一个三角形角的字典,其中每个值都是连接到该角的其他角的字典.你可以这样设置:
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
Run Code Online (Sandbox Code Playgroud)
现在,如果您打印triangle
(或a
或b
或c
为此事),你会看到它充满了{...}
,因为任何两个角指的是回对方.