【发布时间】:2014-01-19 06:33:29
【问题描述】:
问候 Pythonic 世界。学习 Python 3.3 的第 4 天,我遇到了 list.sort 的一个奇怪属性。
我创建了一个包含五个元素的列表:四个字符串,中间有一个数字。由于混合类型,试图让list.sort 工作会出现预期错误:
>>> list = ['b', 'a', 3, 'd', 'c']
>>> list.sort()
Traceback (innermost last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
>>> list
['b', 'a', 3, 'd', 'c']
列表没有改变。
但后来我把数字移到最后,再次使用 list.sort,得到了这个:
>>> list = ['b', 'a', 'd', 'c', 3]
>>> list.sort()
Traceback (innermost last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
>>> list
['a', 'b', 'c', 'd', 3]
好的,一个错误。但该列表已自行排序,将数字踢到最后。我在这个网站或 Langtangen 找不到任何解释。这种行为是否有一些根本原因?它在某些情况下有用吗?
【问题讨论】:
-
我假设python在开始排序之前不会对元素进行类型检查,成功交换了一些元素,然后在比较两种不兼容的类型时引发错误。
-
Python 对小列表使用二进制排序。所以这就是为什么它能够在得到数字之前对前几个进行排序。然后你得到了错误
-
没有,列表本身没有完全排序,只有少数能够成功比较的项目被移动到适当的位置。一旦 python 识别出您正在比较不同类型的项目,操作就会停止。
-
你想避免使用
list作为变量名,它会屏蔽内置的list -
@RyanHaining - 谢谢你的建议。它最初以其他文本为前缀,我将其删除。以后会注意的。
标签: python list sorting python-3.x