遍历堆栈(反向列表),是不是有 isempty() 方法?
Posted
技术标签:
【中文标题】遍历堆栈(反向列表),是不是有 isempty() 方法?【英文标题】:Iterating over a stack (reverse list), is there an isempty() method?遍历堆栈(反向列表),是否有 isempty() 方法? 【发布时间】:2011-05-31 15:28:09 【问题描述】:在 Python 中迭代堆栈的最佳方法是什么?
a = [1,2,3,4]
while (len(a) > 0)
print a.pop()
# prints 4, 3, 2, 1 in sequence
我找不到isempty
方法,并且每次检查长度似乎都有问题。
【问题讨论】:
你到底想做什么?反向打印? 【参考方案1】:将列表用作布尔条件,仅当列表为空时才计算为False
:
>>> while a:
... print a.pop()
...
4
3
2
1
这不仅更简洁,而且更高效(1.49 毫秒对 1.9 毫秒的 10,000 个列表),因为它只需要检查是否存在第一个元素:
$ 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】:Python: What is the best way to check if a list is empty?
Stack (Python)
【讨论】:
【参考方案3】:容器的通常约定是它们不为空时为 True,为空时为 False,所以你可以这样做:
while a:
print a.pop()
【讨论】:
以上是关于遍历堆栈(反向列表),是不是有 isempty() 方法?的主要内容,如果未能解决你的问题,请参考以下文章