在遍历栈(反向列表)时,是否有一个 isempty() 方法?

9

在Python中迭代遍历一个栈的最佳方式是什么?

a = [1,2,3,4]
while (len(a) > 0)
  print a.pop()

# prints 4, 3, 2, 1 in sequence

我找不到isempty方法,每次都检查长度似乎有些不对。


您确切想要做什么?倒序打印? - ismail
3个回答

34

通常情况下,容器为非空时被视为True,为空时被视为False,因此您可以直接执行以下操作:

while a:
    print a.pop()

8

将列表用作布尔条件,仅当列表为空时评估为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 [:] 实现该操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接