Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在平局的情况下随机选择最大值?_Python_List_Max_Tuples_Min - Fatal编程技术网

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

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],

从实验中,我重温了在打领带的情况下, python根据顺序进行选择(例如,列表中第一个出现的项目) 有没有一种方法,在打成平局的情况下,我可以随机选择一个项目,这样它就不是确定性的,而是基于顺序的

e、 g

每次运行此操作都可以返回([4],10)或([1],10)
并非总是([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()))