最近,我在尝试使用.sort()
和sorted()
对自引用列表进行排序时遇到了一个奇怪的差异。我希望有人能弄清楚这件事。有关守则如下:
lst = [1, 2, 3]
lst[0] = lst
lst[1] = lst
lst[2] = lst
print(lst)
print(sorted(lst))
lst.sort()
print(lst)
[[...], [...], [...]]
[[[...], [...], [...]], [[...], [...], [...]], [[...], [...], [...]]]
[[...], [...], [...]]
我将把您的列表称为X
,因为坦率地说,L
看起来太像第一名了,让我很不舒服。因此,您得到了一个x
列表,如下所示
[x, x, x]
现在,我们有
print(x)
Python非常聪明,可以说:“嘿,看,这个列表递归地包含自己,我们不要在它自己的内部再次打印它。”X
在列表中出现的所有位置,我们将获得[...]
[[...], [...], [...]]
x.sort()
print(x)
[[...], [...], [...]]
最后,你有趣的例子。
sorted(x)
与list.sort
不同,sorted
不修改列表,而是生成一个新列表。让我们将这个新列表称为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
不是递归问题;这是一个包含其他列表的非常普通的列表。因此,我们在Y
中打印X
。现在,再往下一层,我们查看X
内部,看到它再次包含X
。这是一个递归问题,但它发生在一步之后,因为我们创建了一个新列表,尽管它看起来与原始列表相同,但它是不同的。
[[[...], [...], [...]], [[...], [...], [...]], [[...], [...], [...]]]
问题内容: 每当我在控制台中输入错误或出错时,都会出现以下消息: 我同时使用Anaconda安装了Python 2.7和3.3。我想知道这是否正常还是python 2.7和3.3之间存在冲突 问题答案: 假设您使用的是ubuntu,这是相关的错误报告https://bugs.launchpad.net/ubuntu/+source/python3.3/+bug/1192890 您需要修补/etc/
问题内容: 我不了解python中列表的行为: 为什么一个元素的分配影响另一个元素?感谢您的回答! 问题答案: 当您将一个列表相乘时,它会复制对该列表的引用,但不会创建该列表的副本。由于列表是可变的,因此在更改列表时,所有对其引用的引用都会更改。 用ASCII术语来说: 您可以清楚地看到更改list3将同时影响两个位置。 如果要创建可变长列表而不复制引用,则应执行以下操作: 在这里,我们使用列表理
问题内容: 鉴于此程序: Sun的(v 1.6.0_24)产生以下字节码: 带有以下异常表: 我的问题是: 为什么到底在异常表中包括了最后一个条目? 据我了解,它基本上说“ 如果引发异常,请捕获它,然后重试相同的指令 ”。 即使使用空try / catch / finally子句(例如 一些观察 Eclipse编译器不会产生任何此类异常表条目 JVM规范没有记录该指令的任何运行时异常。 我知道JV
我有一个列表我想按升序排序这个列表,但首先是奇数,然后是偶数,就像这样: 无排序功能 我试过这个但我得到一个错误 谢谢你的回应
我刚刚键入,我得到了这个错误: 我没有找到任何关于任何有相同错误的人的参考,
这些数字是,这正是我所期望的。 我完全搞不懂这两个案子的情况。有人能解释清楚吗?