迭代堆栈(反向列表),是否有 isempty() 方法?

发布于 2024-10-09 18:39:24 字数 182 浏览 2 评论 0原文

在 Python 中迭代堆栈的最佳方法是什么?

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

# prints 4, 3, 2, 1 in sequence

我找不到 isempty 方法,并且每次检查长度似乎都是错误的。

What's the best way to iterate over a stack in Python?

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

# prints 4, 3, 2, 1 in sequence

I couldn't find an isempty method, and checking the length each time seems wrong somehow.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

财迷小姐 2024-10-16 18:39:24

容器的通常约定是,非空时它们为 True,空时为 False,因此您可以执行以下操作:

while a:
    print a.pop()

The usual convention for containers is that they are True while not empty and False when empty, so you can just do:

while a:
    print a.pop()
拍不死你 2024-10-16 18:39:24

使用列表作为布尔条件,仅当列表为空时,其计算结果为 False

>>> while a:
...     print a.pop()
... 
4
3
2
1

这不仅更简洁,而且效率更高(对于 10,000 个列表,为 1.49 毫秒 vs 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[:] 来实现。

Use the list as a boolean condition which evaluates to False only if the list is empty:

>>> while a:
...     print a.pop()
... 
4
3
2
1

Not only is this more concise, it is also more efficient (1.49ms vs 1.9ms for a list of 10,000) since it only has to check if there is a first element:

$ 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

You can also use reversed() to get a reverse iterator:

>>> for n in reversed(a):
...     print n
... 
4
3
2
1

Or in one line:

print '\n'.join(map(str, reversed(a)))

Note that this will not remove the elements from the list. If necessary, you can achieve that with del a[:].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文