2012-04-04 16 views
9

Mam dwie listy, takie jak:Python znaleźć minimum i maksimum z dwóch list

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

... i muszę znaleźć min i max wartości z obu list kombinowanych. Oznacza to, że chcę wygenerować pojedynczą wartość minimalną i pojedynczą wartość maksymalną.

Moje pytanie brzmi - jaki jest najbardziej pytonowy sposób osiągnięcia tego?

Każda pomoc bardzo ceniona.

+1

Czy należy oznaczyć zadanie domowe? –

Odpowiedz

25

Prawdopodobnie najbardziej czytelny sposób jest

max(l_one + l_two) 

lub

min(l_one + l_two) 

będzie kopiować list, choć od l_one + l_two tworzy nową listę. Aby uniknąć kopiowania, można zrobić

max(max(l_one), max(l_two)) 
min(min(l_one), min(l_two)) 
+0

Tak więc pierwszy skopiuje listę i znajdzie maksymę (droższą w pamięci). Ale co z drugą metodą, która wymaga większej prędkości? – George

+0

@George: Nie, jest też szybszy. Jedyną wadą jest to, że nie czyta się tak dobrze jak pierwsza. –

+0

Czy możesz wyjaśnić lub dostarczyć mi zasoby, aby nauczyć się rozumowania, które za tym stoi? Czy powinienem zadać to jako nowe pytanie? Lub jest to bardzo trywialne/zależy od implementacji. – George

1

Można łączyć je, a następnie zadzwonić min lub max:

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

Innym sposobem, który pozwala uniknąć kopiowania list

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

jeśli tylko mają listy takie jak Ty, to działa, nawet z listami o różnych rozmiarach:

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

Można nawet mieć inteligentniejsze rozwiązanie, które współpracuje z innym tablicy 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

Jeśli chcesz wybrać maksymalne lub minimalne wartości z dwóch lists.I zdaniem dodaje zadziała:

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

Zwróci wartość maksymalną po porównaniu każdego elementu na tych dwóch listach.

Powiązane problemy