是否有更紧凑的方法来迭代具有元素的可迭代对象,或者如果没有元素则执行其他操作?
我的“问题”出在 Python 中,但我也对其他语言感兴趣。
目前我先测试元素个数:
In [1]: l=[]
In [2]: if l:
...: for e in l:
...: print(e)
...: else:
...: print("else")
...:
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/