Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序?
编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。
无论列表中有什么内容,元素的__lt__
方法都是唯一参考的比较方法。对于集合,a < b
意味着“a
是”的适当子集,b
不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适用__lt__
于哪些列表元素对一致。
如果对于列表中的每对集合,一个实际上是另一个的适当子集,则列表将从最小(基数)集合到最大集合进行排序。否则,无话可说。例如:
>>> sorted([{5, 6}, {3, 4}, {5}, {3}]) # nothing changes
[{5, 6}, {3, 4}, {5}, {3}]
发生的情况是未定义实现细节的结果。自从我撰写本文以来list.sort()
,我知道在这种情况下会发生什么,但是不能保证总是这样工作:
首先,实现询问“是{3, 4} < {5, 6}
”。否,因此前两个元素的顺序与已经排序一致。接下来询问“是{5} < {3, 4}
?”。否,因此前三个元素似乎已经被排序。最后,它询问“是{3} < {5}
?”。再没有,因此原始列表的整个顺序与已经排序的顺序是一致的,并且没有任何变化。
将来的实现可能例如询问“是{5} < {5, 6}
?”。在某个时候,并且由于“是”,所以决定{5}
需要出现在之前{5, 6}
。因此,结果根本没有定义。
问题内容: 从经验上讲,似乎Python的默认列表排序器在传递元组列表时将按每个元组中的第一个元素进行排序。那是对的吗?如果不是,按元组的第一个元素对元组列表进行排序的正确方法是什么? 问题答案: 它会自动按元组中的第一个元素对元组列表进行排序,然后按第二个元素进行排序,依此类推,tuple([1,2,3])将排在tuple([1,2,4])之前。如果要覆盖此行为,请将一个callable作为第二
问题内容: 这个问题已经在这里有了答案 : 如何根据对象的属性对对象列表进行排序? (8个答案) 1年前关闭。 我有一个看起来像这样的对象列表。 Card(10,’H)在这里不是元组,而是对象。我知道如果列表中的每个项目都是元组形式的,如何对列表进行排序,就像这样, 但我不知道如何对对象列表进行排序。我想按第一个输入值(即Card()中的数字)对列表进行排序 我怎样才能做到这一点? 编辑:这是Ca
问题内容: 在Python中创建按字母顺序排序的列表的最佳方法是什么? 问题答案: 基本答案: 这会修改你的原始列表(即就地排序)。要获得列表的排序副本,而无需更改原始副本,请使用以下函数: 但是,上面的示例有些天真,因为它们没有考虑区域设置,而是执行区分大小写的排序。你可以利用可选参数key指定自定义排序顺序(使用,则是不推荐使用的解决方案,因为它必须多次评估- key每个元素仅计算一次)。 因
所以我正在使用日期列表,其中一些值是""即null。我使用了如何在使用集合排序时处理空值Java答案 以两种升序对列表进行排序,将空放在第一位。 我想要的是按升序排列,先有空值,然后像上面的代码一样按升序排列。然后当选择降序来翻转列表时。列表中的第一个值是按降序排列的,然后是所有的空值。 在我按照集合的升序对列表排序后,我尝试了以下操作。反转顺序() 首先保留空值,然后按降序排列日期。 我还尝试了
问题内容: 用Python的方式对压缩列表进行排序是什么? 代码: 上面的代码显示 [[‘d’,3),(’a’,2),(’t’,1),(’x’,0)] 我想排序 压缩 的价值观。因此,理想情况下,它最终看起来像这样 [[‘x’,0),(’t’,1),(’a’,2),(’d’,3)] 。 问题答案:
问题内容: 我有一个Python ,其中包含带有和方法的对象,以确保集合中没有重复项。 我需要对该结果进行json编码,但是即使将一个空值传递给该方法也会引发。 我知道我可以为具有自定义方法的类创建扩展,但是我什至不知道从哪里开始进行转换。我是否应该使用默认方法中的值创建字典,然后返回该方法的编码?理想情况下,我想使默认方法能够处理原始编码器阻塞的所有数据类型(我将Mongo用作数据源,所以日期似