迭代栈(反向列表),有没有 isempty() 方法?

9 投票
3 回答
22388 浏览
提问于 2025-04-16 09:08

在Python中,遍历一个栈的最佳方法是什么呢?

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

# prints 4, 3, 2, 1 in sequence

我找不到一个叫isempty的方法,每次检查长度似乎也不太对劲。

3 个回答

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[:] 来实现。

34

一般来说,容器的约定是:当容器里有东西的时候,它的值是“真”(True),而当容器是空的时,它的值是“假”(False)。所以你可以直接这样做:

while a:
    print a.pop()

撰写回答