2012-04-04 19 views
9

tengo dos listas, tales como:Python encontrar min y máximo de dos listas

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

... y tengo que encontrar el mínimo y el valor máximo de ambas listas combinadas. Es decir, quiero generar un solo valor mínimo y un valor máximo único.

Mi pregunta es: ¿cuál es la forma más pitónica de lograr esto?

Cualquier ayuda muy apreciada.

+1

¿Debería etiquetarse esta tarea? –

Respuesta

25

Podría decirse que la forma más legible es

max(l_one + l_two) 

o

min(l_one + l_two) 

Se copiará las listas, sin embargo, ya l_one + l_two crea una nueva lista. Para evitar la copia, usted podría hacer

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

Así que el primero copiará la lista y descubrirá la máxima (más cara en la memoria). Pero, ¿qué pasa con el segundo método, toma más velocidad sabio? – George

+0

@George: No, también es más rápido. La única desventaja es que no se lee tan bien como la primera. –

+0

¿Puede explicarme o proporcionarme recursos para que pueda aprender el razonamiento detrás de esto? ¿Debería hacer esto como una nueva pregunta? O es muy trivial/depende de la implementación. – George

1

Puedes combinarlos y luego llamar a valores mínimos y máximos:

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

Otra forma que se evite la copia de las listas

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

si sólo tiene listas como usted lo hace, esto funciona, incluso con listas de diferentes tamaños:

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

Usted puede incluso tener una solución más inteligente que funciona con diferente gama 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

Si desea seleccionar los valores mínimo y máximo o de los dos lists.I creo que el siguiente trabajo:

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

Devolverá un valor máximo después de comparar cada elemento en estas dos listas.

Cuestiones relacionadas