Вопрос по list, python – Python найти мин и макс два списка

12

У меня есть два списка, таких как:

<code>l_one = [2,5,7,9,3]
l_two = [4,6,9,11,4]
</code>

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

У меня вопрос - какой самый питонный способ добиться этого?

Любая помощь высоко ценится.

Должно ли это быть помечено как домашнее задание? Scott C Wilson

Ваш Ответ

5   ответов
2

>>> l_one = [2,5,7,9,3]
>>> l_two = [4,6,9,11,4]
>>> min(l_one + l_two)
2
>>> max(l_one + l_two)
11
0

писков. Я думаю, что будет работать следующее:

from numpy import maximum
result = maximum(l_one,l_two)

Он вернет максимальное значение после сравнения каждого элемента в этих двух списках.

2

как у вас, это работает, даже со списками разных размеров:

min(min([i1,i2,i3]))

У вас может даже быть более разумное решение, которое работает с другим массивом numpy:

import numpy as np
i1=np.array(range(5))
i2=np.array(range(4))
i3=np.array(range(-5,5))
np.min(np.concatenate([i1,i2,i3]))
31

Возможно, самый читаемый способ

max(l_one + l_two)

или же

min(l_one + l_two)

Это будет копировать списки, так какl_one + l_two создает новый список. Чтобы избежать копирования, вы можете сделать

max(max(l_one), max(l_two))
min(min(l_one), min(l_two))
@ Джордж: первая форма создает новый список, который будет содержать копии всех ссылок вl_one а такжеl_two, Этот шаг занимает некоторое время, пропорциональное длине списков. Вторая форма не требует копирования, поэтому она быстрее. (Это должно позвонитьmax() однако три раза, поэтому для очень коротких списков это может быть даже немного медленнее, но для очень коротких списков скорость в любом случае не имеет значения.)
@ Джордж: Нет, это также быстрее. Единственным недостатком является то, что он не читает так же хорошо, как первый.
Таким образом, первый скопирует список и выяснит максиму (более дорогой по памяти). Но как насчет второго метода, он занимает больше времени с точки зрения скорости?
@ Джордж: причины чего?
Можете ли вы объяснить или предоставить мне ресурсы, чтобы я мог понять причины этого? Должен ли я задать это как новый вопрос? Или это очень тривиально / зависит от реализации.
12

>>> l_one = [2,5,7,9,3]
>>> l_two = [4,6,9,11,4]
>>> 
>>> from itertools import chain
>>> max(chain(l_one, l_two))
11
>>> min(chain(l_one, l_two))
2

Похожие вопросы