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

use*_*ser 5 python tuples list max min

从实验中我已经放松了,在一个平局的情况下,基于订单的python选择(例如列表中第一个进入的项目)是否有办法,在平局的情况下我可以随机选择一个项目,所以它不是确定性的并且基于秩序?

例如

l = [ ([1], 10) , ([2], 3), ([3], 9), ([4], 10)] 
max(l, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ann 6

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

max(l, key=lambda x: x[1] + random.random())
Run Code Online (Sandbox Code Playgroud)

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

max(l, key=lambda x: (x[1], random.random()))
Run Code Online (Sandbox Code Playgroud)

  • 这可能(通常)导致非最大值项目超过真正的最大值。 (2认同)

Kar*_*ath 5

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

import random
random.shuffle(l)
Run Code Online (Sandbox Code Playgroud)


Pad*_*ham 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))
Run Code Online (Sandbox Code Playgroud)