在Python中迭代堆栈的最佳方法是什么?
a = [1,2,3,4]
while (len(a) > 0)
print a.pop()
# prints 4, 3, 2, 1 in sequence
我找不到isempty
方法,并且每次都以某种方式检查长度。
答案 0 :(得分:25)
容器的通常惯例是它们是真的而不是空的而当空的时候是假的,所以你可以这样做:
while a:
print a.pop()
答案 1 :(得分:6)
将列表用作布尔条件,仅当列表为空时才评估为False
:
>>> while a:
... print a.pop()
...
4
3
2
1
这不仅更简洁,而且效率更高(1.49ms对10,000列表的1.9ms),因为它只需要检查是否有第一个元素:
$ 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
您也可以使用reversed()
获取反向迭代器:
>>> for n in reversed(a):
... print n
...
4
3
2
1
或者在一行中:
print '\n'.join(map(str, reversed(a)))
请注意,这将不从列表中删除元素。如有必要,您可以使用del a[:]
实现该目标。
答案 2 :(得分:2)