如何在python

时间:2017-03-25 09:06:44

标签: python python-2.7 sorting

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

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:

如果我在上面的mylist中包含set(),则不会运行此类。为什么这样?它显示TypeError: can only compare to a set

1 个答案:

答案 0 :(得分:2)

根据the Python2.7 tutorial

  

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

集合仅与between each others相当,因此<可用于比较超级/子集:

  

此外,Set和ImmutableSet支持设置为设置比较。当且仅当每组中的每个元素都包含在另一组中时,两组相等(每组都是另一组的子集)。当且仅当第一组是第二组的适当子集(是子集,但不相等)时,集合小于另一个集合。当且仅当第一个集合是第二个集合的正确超集(是超集,但不相等)时,集合大于另一个集合。

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

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