2010-12-28 11 views

Respuesta

22

La convención habitual de contenedores es que son verdadera mientras no se vacía y falsa cuando está vacío, por lo que sólo puede hacer:

while a: 
    print a.pop() 
6

Utilice la lista como condición booleano que será evaluado False sólo si la lista está vacía:

>>> while a: 
...  print a.pop() 
... 
4 
3 
2 
1 

Esto no sólo es más concisa, es también más eficientes (1.49ms vs 1.9ms para una lista de 10.000), ya que sólo tiene que comprobar si hay un primer elemento:

$ python -mtimeit -c 'a=range(10000) 
while len(a): 
    a.pop()' 
10000 loops, best of 3: 1.9 msec per loop 
$ python -mtimeit -c 'a=range(10000) 
while a:  
    a.pop()' 
1000 loops, best of 3: 1.49 msec per loop 

también puede utilizar reversed() para obtener un iterador inverso:

>>> for n in reversed(a): 
...  print n 
... 
4 
3 
2 
1 

O en una sola línea:

print '\n'.join(map(str, reversed(a))) 

Tenga en cuenta que esto no eliminar los elementos de la lista. Si es necesario, puede lograrlo con del a[:].

Cuestiones relacionadas