Выбор списка с наибольшим значением - PullRequest
4 голосов
/ 28 марта 2019

У меня есть два списка чисел, и я хочу, чтобы функция возвращала список с наибольшим номером, то есть с двумя списками [1,2,3,9] и [4,5,6,7,8], функция должна возвращать [1,2,3,9].

Я знаюдля факта, что это работает:

a = [1,2,3,9]
b = [4,5,6,7,8]
ans = [_ for _ in [a,b] if max(_) == max((max(a),max(b)))][0]

Я знаю, что есть:

a = [1,2,3,9]
b = [4,5,6,7,8]
if max(a)>max(b):
    ans = a
else:
    ans = b

Но есть ли более эффективное решение с одной или двумя строками?

Ответы [ 4 ]

9 голосов
/ 28 марта 2019

Как насчет использования следующего без цикла for. Просто сравните max списков

a = [1,2,3,9]
b = [4,5,6,7,8]
ans = (a if max(a) > max(b) else b)
# [1, 2, 3, 9]
3 голосов
/ 28 марта 2019

Функция max позволяет вам указать ключ. Вы можете предоставить два списка в виде списков для max () и использовать max в качестве ключевой функции. Это даст вам результат с очень компактным утверждением:

a = [1,2,3,9]
b = [4,5,6,7,8]
result = max([a,b],key=max)
0 голосов
/ 28 марта 2019

Я бы порекомендовал numpy или pandas, но если честно, ваше решение выглядит хорошо.

Вот простой пример (печатание на телефоне не проверено)

npa = np.array(a) 
npb = np.array(b)

max_array = None
total_max = 0  # or -np.inf if you want to deal with negative numbers too
for k in [npa, npb]:
    if k.max() > total_max:
         max_array = k
0 голосов
/ 28 марта 2019

Это будет работать

max([a,b], key=max)

Хитрость заключается в том, чтобы узнать, что функция max может быть применена к объектам, которые не имеют естественной числовой интерпретации, с использованием функции key.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...