Python 在平局的情况下随机选择最大值?
从实验中,我重温了在打领带的情况下, python根据顺序进行选择(例如,列表中第一个出现的项目) 有没有一种方法,在打成平局的情况下,我可以随机选择一个项目,这样它就不是确定性的,而是基于顺序的 e、 g 每次运行此操作都可以返回([4],10)或([1],10)Python 在平局的情况下随机选择最大值?,python,list,max,tuples,min,Python,List,Max,Tuples,Min,从实验中,我重温了在打领带的情况下, python根据顺序进行选择(例如,列表中第一个出现的项目) 有没有一种方法,在打成平局的情况下,我可以随机选择一个项目,这样它就不是确定性的,而是基于顺序的 e、 g 每次运行此操作都可以返回([4],10)或([1],10) 并非总是([1],10)您需要先找到所有最大值,然后随机选择一个: from operator import itemgetter from random import choice l = [([1], 10) , ([2],
并非总是([1],10)您需要先找到所有最大值,然后随机选择一个:
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))
在选择最大值之前,先洗牌列表:
import random
random.shuffle(l)
您可以为键值添加一点随机性:
max(l, key=lambda x: x[1] + random.random())
或者更一般地说,如果键不仅仅是整数:
max(l, key=lambda x: (x[1], random.random()))
我认为你不能直接做(即,告诉
max
随机做),但你可以先做max
,然后做filter
,然后再做random.choice
。这可能(通常)导致非最大项目超过真正的最大值。它怎么可能导致非最大项目超过真正的最大值?我刚刚运行了多次迭代,在每次迭代中,最大值似乎是true@user,将.7添加到2.5,将.1添加到3,返回的最大值是多少?整数是可以的,但正如切普纳所说,总的来说,这不是一个好主意approach@chepner我认为这是显而易见的,但谢谢你的推动:-)。我现在添加了一个通用的变体。这是一个很好的修复。它适用于任何类型,而不仅仅是数字。
max(l, key=lambda x: (x[1], random.random()))