2009-01-11 13 views
9

Lo que quiero decir es, Estoy buscando un código realmente corto que devuelva el valor más bajo. por ejemplo:Short Python ¿Código para decir "Elige el valor más bajo"?

a=[1,2,3,4,5,6,7,8,9,10] 
b=[1,2,3,4,5,6,7,8] 
len(a) = 10 
len(b) = 8 
if (fill-this-in): 
    print(lesser-value) 

Y se me olvidó añadir que si b es menor que a, b quiero regresar - no len (b) - la variable b.

Respuesta

3

min() debe lograr lo que necesita

print(min(a,b)) 
-3

No sé Python, pero para algo como esto que haría uso de un operador ternario.

print(length(a) < length(b) ? length(a) : length(b)) 

Una cosa a tener en cuenta sobre esto que si son iguales se imprimirá longitud (b)

+2

que no te lo Downvote pero, si usted se encuentra respondiendo a una pregunta de pitón con etiquetas a partir de la inmortal frase "I don' Conozco a Python pero ... ", quizás solo quieras pensar en no responder :-). – paxdiablo

0

¿La siguiente lo que quiere?

if len(a) < len(b): 
    print a 
else: 
    print b 

Alternativamente, si desea utilizar el operador ternario como @ Andrew G. Johnson:

print a if len(a) < len(b) else b 

PS. Recuerde que Python no usa llaves para sus bloques, y que su operador ternario es diferente de los lenguajes tipo C.

25

No es muy claro sobre lo que quiere, por lo que algunas alternativas. Teniendo en cuenta los siguientes dos listas:

a = [1,2,3,4,5,6,7,8,9,10] 
b = [1,2,3,4,5,6,7,8] 

Para imprimir la lista más corta, sólo puede hacer ..

>>> print(min(a, b)) 
[1, 2, 3, 4, 5, 6, 7, 8] 

para obtener la longitud más corta como un número, puede min la len() de cada lista , o que len(min()) (ambos son idénticos, elija qué cada vez que le resulte más legible) ..

>>> print(min(len(a), len(b))) 
# or.. 
>>> print(len(min(a, b))) 
8 

Para imprimir el valor más bajo en cualquiera de las listas, puede do plicar la lista como un solo argumento a min()

>>> a.extend(b) # Appends b to a 
>>> print a 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8] 
>>> print(min(a)) 
1 

Finalmente, otra posibilidad, la lista que tiene los valores más bajos en total:

>>> max(sum(a), sum(b)) 
55 

para imprimir la lista actual con la más alta sum(), usted podría o bien utilizar el operador ternario, como ..

>>> print a if sum(a) > sum(b) else b 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

..although nunca me gustó (o uso) que, en lugar de utilizar el ligero más tiempo, regular si/else declaraciones ...

>>> if sum(a) > sum(b): 
...  print a 
... else: 
...  print b 
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
+0

Voto ascendente porque da casi todas las posibilidades ... – paxdiablo

+0

+1 por minuciosidad :) aunque la pregunta realmente debería ser arreglada –

5

Si la longitud de la lista es lo que hace que sea inferior (no sus valores), luego de que realmente quieren:

min(a, b, key=len) 

los cuales es sólo incidentalmente equivalente a

min(a, b) 

en el ejemplo dado

1

heads up, min(a, b, key=len) solo funciona en python 2.5 y arriba, creo.

(que no está trabajando en mi MacBook con Python 2.4, pero mi servidor Linux con 2,5 está muy bien)

0

parece que esta respuesta puede ahora estar fuera de fecha. Acabo de tener la misma pregunta y encontré esta respuesta, pero no estaba obteniendo los resultados que esperaba. Resulta que Min no devuelve automáticamente la más corta de las dos listas (en 2.7). Para conseguir que usted tiene que utilizar el argumento de 'llave' (introducido en 2.5) (énfasis añadido):

min (iterable [, clave]) min (arg1, arg2, * args [, clave]) Volver el elemento más pequeño en un iterable o el más pequeño de dos o más argumentos.

Si se proporciona un argumento posicional, iterable debe ser un no vacío iterable (tal como una cadena no vacía, tupla o lista). Se devuelve el elemento más pequeño en el iterable. Si se proporcionan dos o más argumentos posicionales , se devuelve el menor de los argumentos posicionales.

El argumento de la tecla opcional especifica una función de ordenamiento de un argumento como la utilizada para list.sort(). El argumento clave, si se proporciona, debe ser en forma de palabra clave (por ejemplo, min (a, b, c, clave = func)).

cambiado en la versión 2.5: Añadido soporte para el argumento clave opcional

lo tanto, en este ejemplo, aunque parece que funciona (y aún lo haría en 2.7), que sólo porque la lista de los números enteros es el mismo. Sin embargo, si se trataba de dos diferentes listas no ordenada entonces:

min(a,b) 

devolvería la lista con el más bajo primera entero.

Para estar seguro de obtener la más corta de las dos listas, utilice:

min(a,b, key=len) 
+0

Maldición, eché de menos que @coady ya respondió de manera más sucinta. – deepstructure

Cuestiones relacionadas