在Python中迭代遍历一个栈的最佳方式是什么?
a = [1,2,3,4]
while (len(a) > 0)
print a.pop()
# prints 4, 3, 2, 1 in sequence
我找不到isempty
方法,每次都检查长度似乎有些不对。
通常情况下,容器为非空时被视为True,为空时被视为False,因此您可以直接执行以下操作:
while a:
print a.pop()
将列表用作布尔条件,仅当列表为空时评估为False
:
>>> while a:
... print a.pop()
...
4
3
2
1
这不仅更加简洁,而且更加高效(对于一个包含10,000个元素的列表来说,1.49毫秒比1.9毫秒更快),因为它只需要检查是否存在第一个元素:
$ 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 [:]
实现该操作。