使用此代码,我会根据元素的长度获得排序列表。
>>> a = [[1,2,3],[3,4,5,6],[7,8],[9,10,11]]
>>> print sorted(a, key=lambda m: len(m))
[[7, 8], [1, 2, 3], [9, 10, 11], [3, 4, 5, 6]]
在对列表列表进行排序时,我需要在元素长度相同时引入一些随机性。对于前面的例子。我需要得到排序结果
[[7, 8], [1, 2, 3], [9, 10, 11], [3, 4, 5, 6]]
或
[[7, 8], [9, 10, 11], [1, 2, 3], [3, 4, 5, 6]]
随机。
如何在Python中实现?
答案 0 :(得分:4)
Python的排序函数是稳定的,这意味着对于比较相等的元素,顺序与原始列表相同。因此,您可以随机播放列表,然后根据长度进行排序。
import random
a = [[1,2,3],[3,4,5,6],[7,8],[9,10,11]]
random.shuffle(a)
a.sort(key = len)
请注意,此代码会对列表a
进行随机播放和排序。
答案 1 :(得分:4)
import random
print sorted(a, key=lambda m: (len(m), random.random()))
答案 2 :(得分:3)
这是一个明显的"办法。在您的示例中,它将以相同的概率产生两种可能的结果:
from random import random
a = [[1,2,3],[3,4,5,6],[7,8],[9,10,11]]
print(sorted(a, key=lambda m: (len(m), random())))
由于元组比较的工作方式,当元素与长度相关时,比较继续比较调用random()
的结果。