возвращать случайное значение из списка при выборе максимального значения и иметь 2 одинаковых максимальных значения - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть список вроде

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 голосов
/ 24 февраля 2019

Можно сначала найти максимальное значение, а затем случайным образом выбрать среди кортежей, содержащих этот максимум:

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')
0 голосов
/ 24 февраля 2019

Это можно сделать двумя способами:

(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())))
0 голосов
/ 24 февраля 2019

Использование 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...