在平局的情况下随机选择最大值?

时间:2015-11-01 23:22:54

标签: python list max tuples min

从实验中我已经解释说,当遇到平局时, 基于订单的python选择(例如列表中第一个出现的项目) 有没有办法,在平局的情况下,我可以随机选择一个项目,以便它不是确定性的并且基于订单?

e.g。

l = [ ([1], 10) , ([2], 3), ([3], 9), ([4], 10)] 
max(l, key=lambda x: x[1])

每次运行,都可以返回([4],10)或([1],10) 并不总是([1],10)

3 个答案:

答案 0 :(得分:5)

在选择最大值之前随机播放列表:

import random
random.shuffle(l)

答案 1 :(得分:4)

您需要先找到所有最大值,然后随机选择一个:

from operator import itemgetter
from random import choice

l = [([1], 10) , ([2], 3), ([3], 9), ([4], 10)] 

mx = max(l, key=itemgetter(1))

all_maxes = [ele for ele in l  if ele[1] == mx[1]]

print(choice(all_maxes))

答案 2 :(得分:3)

您可以为键值添加一点随机性:

max(l, key=lambda x: x[1] + random.random())

或者更一般地说,如果您的密钥不仅仅是整数:

max(l, key=lambda x: (x[1], random.random()))