gpt4 book ai didi

Python 自引用列表在排序时产生奇怪的输出

转载 作者:行者123 更新时间:2023-12-04 04:26:55 24 4
gpt4 key购买 nike

我最近在尝试使用 .sort() 对自引用列表进行排序时遇到了一个奇怪的差异。和 sorted() .我希望有人能对此有所了解。有问题的代码如下:

lst = [1, 2, 3]

lst[0] = lst
lst[1] = lst
lst[2] = lst

print(lst)

print(sorted(lst))

lst.sort()

print(lst)
上面的代码产生以下输出:
[[...], [...], [...]]
[[[...], [...], [...]], [[...], [...], [...]], [[...], [...], [...]]]
[[...], [...], [...]]
这是 print(sorted(lst)) 的输出这让我感到困惑。想知道是否是某种形式的递归导致了它?

最佳答案

我要调用你的名单 x ,因为坦白l看起来太像第一了,让我失望了。所以你有一个列表 x看起来像这样

[x, x, x]
现在,我们做
print(x)
Python 足够聪明,可以说“嘿,看,这个列表递归地包含自己,让我们不要在它自己内部再次打印它。”所有的地方 x出现在您的列表中,我们得到 [...]
[[...], [...], [...]]
现在考虑
x.sort()
print(x)
我们对列表进行排序,这没什么用,因为每个元素都是相同的。然而,至关重要的是,这一切都发生在原地。该列表最初看起来像 [x, x, x]并且最终看起来像 [x, x, x] ,其中 x是我们的 list 。所以打印看起来是一样的。
[[...], [...], [...]]
最后,你有趣的例子。
sorted(x)
sorted ,不像 list.sort , 不会修改列表而是生成一个新列表。让我们称这个新列表 y .在您的 x.sort例如,最后,我们有相同的列表 x看起来像 x = [x, x, x] .当我们打印列表时,我们立即看到递归并停止打印。
然而, sorted(x)产生一个新列表。该列表仍然看起来像 [x, x, x] ,但它不是列表 x .这是一个新列表 y = [x, x, x] .
现在,我们做
print(sorted(x))
Python 看到一个包含三个元素的列表: [x, x, x] .我们看看这些元素中的每一个。我们正在打印 y ,因此该列表包含 x 的事实不是递归问题;它是一个非常普通的列表,其中包含其他列表。所以我们打印 x内部 y .现在,再往下一层,我们看看内部 x看到它包含,瞧, x再次。这是一个递归问题,但它发生在一步之后,因为我们创建了一个新列表,尽管它看起来与原始列表相同,但又是不同的。
[[[...], [...], [...]], [[...], [...], [...]], [[...], [...], [...]]]

关于Python 自引用列表在排序时产生奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68261721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com