在Python中引入一些随机性和排序

时间:2014-04-09 02:09:06

标签: python sorting

使用此代码,我会根据元素的长度获得排序列表。

>>> 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中实现?

3 个答案:

答案 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()的结果。