python - 是否有类似 "iterate iterable if it has elements, else ..."的结构?

标签 python language-agnostic

是否有更紧凑的方法来迭代具有元素的可迭代对象,或者如果没有元素则执行其他操作?

我的“问题”出在 Python 中,但我也对其他语言感兴趣。

目前我先测试元素个数:

In [1]: l=[]

In [2]: if l:
   ...:     for e in l:
   ...:         print(e)
   ...: else:
   ...:     print("else")
   ...:
else

for statement has an else :

In [2]: for e in []:
   ...:     print(e)
   ...: else:
   ...:     print("else")
   ...:
else

但它的“套件”( block )也在迭代完成时执行:

In [1]: for e in [1,2,3]:
   ...:     print(e)
   ...: else:
   ...:     print("else")
   ...:
1
2
3
else

我意识到这里没有太多收获(一行和缩进级别),但我很好奇是否存在这样的东西。

最佳答案

大多数时候你只是测试长度并提前退出:

if not l:
    # empty case
    return  # or raise exception

无论如何,因为在空列表上不会发生迭代,所以下面的也足够了,不需要else:

if not l:
    # empty case
for i in l:
    # only ever executed if there are any elements

for ... else 套件仅对提前退出 的循环有用; else 套件为所有完成 的循环执行。如果使用了 break,则跳过 else。这使得它不适合检测空序列,因为在没有 break 语句的情况下,无论元素数量如何,对空序列的迭代都会成功完成。

关于python - 是否有类似 "iterate iterable if it has elements, else ..."的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40149826/

相关文章:

python - Flask Access-Control-Allow-Origin 用于多个 URL

python - Django 模板 - 使用 2 个模型来过滤结果

language-agnostic - 只要不损害可读性,简单的三元大小写就可以在程序流程中使用吗?

algorithm - 行为树实现

python - 按用法对单词排序

python - Python 中的 UTF-32

python - 无法选择 TreeView 内的复选框

http - 通过 HTTP 获取文件创建日期

language-agnostic - 深度复制操作是否递归复制它不拥有的子变量?

design-patterns - 代码重复是否是提取方法的充分理由...?