2010-12-28 10 views

Odpowiedz

22

Zazwyczaj Konwencja kontenerów jest to, że są one prawdziwe, gdy nie jest pusta i fałsz gdy pusty, więc można po prostu zrobić:

while a: 
    print a.pop() 
6

Użyj listy jako logicznego stanu, który ocenia się False tylko wtedy, gdy lista jest pusta:

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

Nie tylko jest to bardziej zwięzłe, jest również bardziej wydajne (1.49ms vs 1.9ms do listy 10000), ponieważ ma tylko w celu sprawdzenia, czy jest pierwszy element:

$ 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 

można również użyć reversed() uzyskać odwrotny iterator:

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

Lub w jednym wierszu:

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

Zauważ, że to nie będzie usunięcia elementów z listy. Jeśli to konieczne, możesz to osiągnąć za pomocą del a[:].