2012-04-04 23 views
9

Ho due elenchi come:Python trovare min & max di due liste

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

... e ho bisogno di trovare il minimo e il valore massimo da entrambe le liste combinate. Cioè, voglio generare un singolo minuto e un valore massimo singolo.

La mia domanda è: qual è il modo più poderoso per raggiungere questo obiettivo?

Qualsiasi aiuto molto apprezzato.

+1

Dovrebbero essere contrassegnati come compiti? –

risposta

25

Probabilmente il modo più leggibile è

max(l_one + l_two) 

o

min(l_one + l_two) 

Sarà copiare le liste, però, dal momento l_one + l_two crea un nuovo elenco. Per evitare la copia, si potrebbe fare

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

Quindi il primo copia l'elenco e trova la massima (più costosa in memoria). Ma per quanto riguarda il secondo metodo, ci vuole più velocità? – George

+0

@George: No, è anche più veloce. L'unico svantaggio è che non è bello come il primo. –

+0

Puoi spiegarmi o fornirmi le risorse in modo da poter apprendere il ragionamento che c'è dietro? Dovrei chiedere questa come una nuova domanda? Oppure è molto banale/dipende dall'implementazione. – George

1

Si possono combinare e quindi chiamare min o 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

Un altro modo che evita di copiare le liste

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

se avete appena liste come te, funziona anche con elenchi di dimensioni diverse:

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

si può anche avere una soluzione più intelligente che funziona con diverse serie 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

Se si desidera selezionare i valori massimi o minimi da due lists.I pensare quanto segue funziona:

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

Restituirà un valore massimo dopo aver confrontato ciascun elemento in questi due elenchi.