一个关于列表"bug"的问题
>>> a =['qwe']>>> a.append(a)
>>> a
['qwe', [...]]
所以请问a里面的 […]是这么来的? 本帖最后由 Twilight6 于 2020-7-19 18:20 编辑
你试着运行下这个代码就知道 [...] 是什么:
a =['qwe']
a.append(a)
# 打印 a 列表
print(a)
# 打印 a 列表的第一个元素
print(a)
# 打印 a 列表的第二个元素
print(a)
输出结果:
['qwe', [...]]
qwe
['qwe', [...]]
发现打印 a 列表的第二个元素和直接打印 a 列表效果相同
而为什么要这样表示呢?
只要我们想想,如果按照原本的显示,就会变成无限套娃了
也就是列表里面有原本本身,而原本列表的本身里面有原本列表的本身的本身列表..... 一直无限下去
所以 Python 因为循环的无限次,所以 Python 用 [...] 来表示
举个例子:
你的列表 ['qwe'] 里面添加列表本身,那么就是这样的 ['qwe',['qwe',['qwe',['qwe',['qwe'],[...]]]]] 一直下去
你可以在试试这个代码:
a =['qwe']
a.append(a)
print(a) # 类似无限递归
输出结果:
['qwe', [...]]
实际上在列表里添加列表本身,会形成类似无限递归的效果
这个不是bug,是Python的一个特例。[...]表示这个列表本身,我也不知道最新的Python版本为什么要搞成这样
你就给我设置最佳,看着35个鱼币,我眼馋啊,谁让我从来不充值呢{:10_257:} 楼上大佬正解,学习到了 这种类似递归,list.append()方法的时候,会改变自身内存结构,也就是重新分配,当a变量追加a变量的时候,发现a变量正在使用,然后等待上一个a执行结束.然后每一个都如此.希望你能明白 本帖最后由 zltzlt 于 2020-7-19 21:25 编辑
这不叫 Bug,实际上这是无限递归列表。可以使用 a.append(a[:]) 避免无限递归:
>>> a =
>>> a.append(a[:])
>>> a
] 你可以 使用 append(a[:])避免递归 语法规则,列表嵌套自身时显示为[...] Twilight6 发表于 2020-7-19 18:15
你试着运行下这个代码就知道 [...] 是什么:
从来没试过,好好玩的样子{:10_257:} Twilight6 发表于 2020-7-19 18:15
你试着运行下这个代码就知道 [...] 是什么:
太厉害了,佩服 Twilight6 发表于 2020-7-19 18:15
你试着运行下这个代码就知道 [...] 是什么:
oooo
我懂了,是不是就是c语言内的链表
一旦动用了他,就会一直重复下去
我说的对吗 因为嵌套的是自身,所以对嵌套中任意一级的元素进行修改时,基本元素也就跟着改变 陈尚涵 发表于 2020-7-19 17:25
这个不是bug,是Python的一个特例。[...]表示这个列表本身,我也不知道最新的Python版本为什么要搞成这样
...
还能减{:10_245:} zltzlt 发表于 2020-7-19 19:31
这不叫 Bug,实际上这是无限递归列表。可以使用 a.append(a[:]) 避免无限递归:
学到了,拿小本子记下来{:10_298:} UncleMonster 发表于 2020-7-23 13:29
学到了,拿小本子记下来
{:10_297:} zltzlt 发表于 2020-7-23 13:30
有时候逛逛问题帖也能学到很多东西{:10_297:}
页:
[1]