2012-04-04 15 views
9

Ich habe zwei Listen wie:Python findet min & max von zwei Listen

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

... und ich brauche den minimalen und maximalen Wert aus beiden Listen kombiniert zu finden. Das heißt, ich möchte einen einzelnen minimalen und einen einzigen maximalen Wert erzeugen.

Meine Frage ist - was ist der pythischste Weg, dies zu erreichen?

Jede Hilfe sehr geschätzt.

+1

Sollte dies mit Hausaufgaben getaggt sein? –

Antwort

25

Die wohl lesbare Weise ist

max(l_one + l_two) 

oder

min(l_one + l_two) 

Es die Listen kopiert werden, obwohl, da l_one + l_two eine neue Liste erstellt. Um den Kopiervorgang zu vermeiden, könnten Sie tun

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

Also wird der erste die Liste kopieren und die Maxime herausfinden (teurer im Speicher). Aber was ist mit der zweiten Methode, dauert es länger Geschwindigkeit? – George

+0

@George: Nein, es ist auch schneller. Der einzige Nachteil ist, dass es nicht so gut liest wie das erste. –

+0

Kannst du mir bitte erklären oder mir Ressourcen zur Verfügung stellen, damit ich die Gründe dahinter verstehen kann? Soll ich das als neue Frage stellen? Oder es ist sehr trivial/abhängig von der Implementierung. – George

1

Sie können sie kombinieren und dann rufen min oder 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

Eine andere Möglichkeit, die Listen Kopieren verhindert

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

, wenn Sie gerade haben Listen wie Sie, das funktioniert, auch mit Listen aus verschiedenen Größen:

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

Sie können sogar eine intelligentere Lösung haben, die mit unterschiedlichen numpy Array funktioniert:

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

Wenn Sie die Maximal- oder Minimalwerte der beiden lists.I wird folgendes Arbeit denken auswählen möchten:

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

Nach dem Vergleich jedes Elements in diesen beiden Listen wird ein Maximalwert zurückgegeben.