Получить кортеж с наибольшим числовым элементом, и, если происходит связывание, случайным образом выбрать один из связанных кортежей - PullRequest
0 голосов
/ 26 августа 2018

У меня есть список кортежей:

a = [([4, 7, 9], [3], 5.5), ([2, 5, 8], [3], 5.5), ([2, 5, 8], [9], 4.5)]

, и я хотел бы получить кортеж с наибольшим числовым элементом (не в списке, например, 5,5 в случае ([4, 7, 9], [3], 5.5), и если есть связь, скажем для этого примера ([4, 7, 9], [3], 5.5) и ([2, 5, 8], [3], 5.5), один из этих связанных кортежей будет случайным образом выбран в качестве выходного.

Мой прогресс на данный момент:

>>> import operator
>>> max(a, key = operator.itemgetter(1))
([3], [4, 7, 9], 5.5)

Я не уверен относительно того, как я могу случайным образом выбрать один из связанных кортежей в данный момент времени. Некоторое понимание будет великолепным!

Примечание: Чтобы иметькаждый раз, когда запускается функция choice(.), выполняйте другой выбор, делайте это с начальным числом и выполняйте:

r = random.Random(500) # seed number is arbitrary
r.choice(...)

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вот более общая версия, которая будет работать, не полагаясь на конкретное местоположение индекса:

from numbers import Number
from random import choice
max_subelement_value = None
for element in a:
    for subelement in element:
        if isinstance(subelement, Number) and (max_subelement_value is None or subelement > max_subelement_value):
            max_subelement_value = subelement
potential_results = [x for x in a if max_subelement_value in x]
choice(potential_results)
0 голосов
/ 26 августа 2018

Решение:

m=max(a,key=lambda x: x[2])[2]
print(choice([i for i in a if i[2] == m]))

Пример:

from random import choice
a = [([4, 7, 9], [3], 5.5), ([2, 5, 8], [3], 5.5), ([2, 5, 8], [9], 4.5)]
m=max(a,key=lambda x: x[2])[2]
print(choice([i for i in a if i[2] == m]))

Пояснение:

  1. пройдитесь по списку, затем возьмите те, которые третий (2 в индексации Python), затем сравните его с элементом max для третьего индекса (второго в индексации Python), если он такой же, поместите его в список, иначе нет

  2. используйте random.choice (в моем случае, поскольку я from .. import .. использую прямой choice, чтобы случайным образом выбрать элемент

...