迭代堆栈(反向列表),是否有一个isempty()方法?
在Python中迭代堆栈的最佳方式是什么?
a = [1,2,3,4]
while (len(a) > 0)
print a.pop()
# prints 4, 3, 2, 1 in sequence
我找不到一个isempty
方法,每次查看长度似乎都是错误的。
通常的容器惯例是,它们是真的,而不是空的,空的时候是假的,所以你可以这样做:
while a:
print a.pop()
使用该列表作为布尔条件,仅当列表为空时才计算为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[:]
来实现。
Python:检查列表是否为空的最佳方法是什么?
堆栈(Python)
链接地址: http://www.djcxy.com/p/22507.html上一篇: Iterating over a stack (reverse list), is there an isempty() method?
下一篇: Why is there no explicit emptyness check (for example `is Empty`) in Python