我有一个这样的自定义列表:
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
我有两个问题:
我只想知道在python中如何定义具有不同数据类型的值的优先级
如果我在上面的mylist中包含set()
,则不会运行此类。为什么这样?它显示TypeError: can only compare to a set
答案 0 :(得分:2)
请注意,比较不同类型的对象是合法的。结果是确定性的但是随意的:类型按其名称排序。因此,列表总是小于字符串,字符串总是小于元组等。混合数字类型根据它们的数值进行比较,因此0等于0.0等。
集合仅与between each others相当,因此<
可用于比较超级/子集:
此外,Set和ImmutableSet支持设置为设置比较。当且仅当每组中的每个元素都包含在另一组中时,两组相等(每组都是另一组的子集)。当且仅当第一组是第二组的适当子集(是子集,但不相等)时,集合小于另一个集合。当且仅当第一个集合是第二个集合的正确超集(是超集,但不相等)时,集合大于另一个集合。
所有这些不一致都解释了为什么你应该使用Python 3而不是Python 2。
使用Python 3,只有兼容类型才具有可比性。