选择最大值并具有2个相同的最大值时从列表中返回随机值

时间:2019-02-24 18:58:56

标签: python list

我有一个类似

的列表
key_list=[(2, 'just', 'sd'), (2, 'great', 'sd'), (1, 'just great', 'sd')]

我想为每个元素在列表的0索引处选择最大值,例如这里的最大值是2,但是当不同集合中的同一值有两个最大值时,它会随机返回一个元素,例如(2, 'just', 'sd')(2, 'great', 'sd')的最大值为2,并返回其中任意一个。

我写了

max([i[0] for i in list_keys])

获得最大值,但不知道如何基于此'2'选择随机值

3 个答案:

答案 0 :(得分:1)

您可以通过两种方式执行此操作:

(1)从与最大值匹配的条目中随机选择:

import random
key_list=[(2, 'just', 'sd'), (2, 'great', 'sd'), (1, 'just great', 'sd')]
m = max(i[0] for i in key_list)
print(random.choice([i for i in key_list if i[0] == m]))

(2)使用特殊的按键功能来应用随机的决胜局:

print(max(key_list, key=lambda i: i[0] + random.random()))
# or
print(max(key_list, key=lambda i: (i[0], random.random())))

答案 1 :(得分:0)

使用random.choice

import random

key_list = [
    (2, 'just', 'sd'),
    (2, 'great', 'sd'),
    (1, 'just great', 'sd')
]

max_value = max([key[0] for key in key_list])
max_keys = [key for key in key_list if key[0] == max_value]

print(random.choice(max_keys))

答案 2 :(得分:0)

您可以先找到最大值,然后在包含该最大值的元组中随机选择:

import random

key_list=[(2, 'just', 'sd'), (2, 'great', 'sd'), (1, 'just great', 'sd')]

maxi = max(t[0] for t in key_list)
out = random.choice([t for t in key_list if t[0]==maxi])

print(out)
# (2, 'just', 'sd')