找到一组最大元素的bug

时间:2015-06-06 01:51:44

标签: python

有人可以向我解释为什么我有这个结果吗?

>>> a = set([(0, 1), (1, 0), (0, 0)])    
>>> b = set([(1, 2), (2, 0), (0, 2), (2, 1), (1, 1)])    
>>> max(a,b)    
set([(0, 1), (1, 0), (0, 0)])
>>> max(b,a)
set([(1, 2), (2, 0), (0, 2), (2, 1), (1, 1)])

1 个答案:

答案 0 :(得分:5)

对于集合,a < b表示ab的子集。你的两个集合都不是另一个集合的子集,因此它们被认为是“同样大”,这就是为什么你总是得到第一个参数。

集合排序演示:

>>> sorted([{5,6,7,8,9}, {1,2,3}, {1,2}, {1}, {1,2,3,4}])
[{8, 9, 5, 6, 7}, {1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}]

这里,{5,6,7,8,9}既不是其他任何一个的子集也不是超集,所以它被认为同样大,因为它在开始时并且sort函数是稳定的,所以它保持不变。然而其他四个排序很好,因为{1}{1,2}的子集等。

但是,由于集合之间没有总排序,因此对它们进行排序是部分不可预测的。例如,{5,6,7,8,9}确实移到另一个位置:

>>> sorted([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}])
[{1}, {1, 2}, {1, 2, 3}, {8, 9, 5, 6, 7}, {1, 2, 3, 4}]

如果您想以另一种方式对集合进行排序,例如按大小排序,那么只需使用相应的key

>>> sorted([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}], key=len)
[{1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}, {8, 9, 5, 6, 7}]

>>> max([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}], key=len)
{8, 9, 5, 6, 7}