2012-04-04 5 views
9

У меня есть два списка, такие как:Python найти мин & Макс из двух списков

l_one = [2,5,7,9,3] 
l_two = [4,6,9,11,4] 

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

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

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

+1

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

ответ

25

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

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)) 
+0

Итак, первый скопирует список и узнает максиму (более дорогой в памяти). Но как насчет второго метода, требуется ли более длительная скорость? – George

+0

@George: Нет, это также быстрее. Единственным недостатком является то, что он не читается так же хорошо, как первый. –

+0

Не могли бы вы объяснить или предоставить мне ресурсы, чтобы я мог изучить причины этого? Должен ли я задать это как новый вопрос? Или это очень тривиально/зависит от реализации. – George

1

Вы можете комбинировать их и затем вызвать мин или макс:

>>> 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 
10

Другой способ, который позволяет избежать копирования списков

>>> 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 
1

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

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])) 
0

Если вы хотите, чтобы выбрать максимальное или минимальное значение из двух lists.I думаю, следующие будут работать:

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

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

Смежные вопросы