【问题标题】:How sorting occurs with different datatypes in pythonpython中不同数据类型如何进行排序
【发布时间】:2017-03-25 09:06:44
【问题描述】:

我有一个这样的自定义列表:

mylist1= [-2,0,1,1.5,2,3,6,8,5,'a','-%3','A',True,False,list(),tuple(),dict()]

这里我有这个列表中的大部分数据类型,所以我只是尝试对它们进行排序,看看它是如何对它们进行排序的。

它给了我这样的输出

print sorted(mylist1)
[-2, 0, False, 1, True, 1.5, 2, 3, 5, 6, 8, {}, [], '-%3', 'A', 'a', ()]

这里我们可以看到{}放在[]之前,()最末端。

我搜索到的所有__cmp__ 都在这个mergesort 中运行。 More info

我有两个问题:

问题1:

我只是想知道在 python 中这种不同数据类型的值的优先级是如何定义的

问题2:

如果我在我的列表上方包含set(),它将不会运行这种排序。为什么这样?它显示TypeError: can only compare to a set

【问题讨论】:

  • 为什么要投反对票??在搜索了很多东西后,我问了一个有效的问题。如果您知道答案,请张贴而不是投反对票
  • 不要一次问多个问题。如果您进行研究,您会发现现有的答案,例如stackoverflow.com/questions/3270680/… 和 2,stackoverflow.com/questions/4084243/…
  • @jonrsharpe 谢谢,但这是同一个列表的相关问题,所以我问了。
  • 我不确定你想说什么。您的两个问题都在其他地方得到了回答;尤其是第二个很容易找到答案,因为您有一条错误消息要搜索。这不是再次询问的好理由。

标签: python python-2.7 sorting


【解决方案1】:

根据the Python2.7 tutorial

请注意,比较不同类型的对象是合法的。结果是确定性但任意的:类型按名称排序。因此,列表总是小于字符串,字符串总是小于元组,等等。混合数值类型根据它们的数值进行比较,所以 0 等于 0.0,等等。

集合只能比较between each others,所以<可以用来比较超集/子集:

此外,Set 和 ImmutableSet 都支持 set 到 set 的比较。两个集合相等当且仅当每个集合的每个元素都包含在另一个集合中(每个元素都是另一个集合的子集)。一个集合小于另一个集合当且仅当第一个集合是第二个集合的真子集(是一个子集,但不相等)。一个集合大于另一个集合当且仅当第一个集合是第二个集合的真超集(是一个超集,但不相等)。


所有这些不一致都解释了为什么应该使用 Python 3 而不是 Python 2。

使用 Python 3,只有兼容的类型具有可比性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2016-04-17
    • 2021-04-03
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多