我有一个词典列表。我需要检查该列表中的所有字典是否都为空。我正在寻找一个简单的陈述,它将在一行中完成。
是否有单行方式来执行以下操作(不包括打印)?
l = [{},{},{}] # this list is generated elsewhere...
all_empty = True
for i in l:
if i:
all_empty = False
print all_empty
python有些新东西......我不知道是否有一种速记内置方式来检查这个。提前致谢。
答案 0 :(得分:21)
all(not d for d in l)
答案 1 :(得分:10)
not any(d for d in l)
可以缩短为not any(l)
。
答案 2 :(得分:9)
not any(d for d in l)
相当于De Morgan's Law到all(not d for d in l)
,但仅适用于一个not
运算符。短路行为也是等效的。
编辑1 :内部genexp实际上是(无害的)冗余:not any(l)
更快更简洁。
编辑2 :评论声称all(not d for d in l)
比not any(l)
“更像你想要表达的”,我强烈不同意:即使是用自然语言,“所有列表中的项目未填充“不再是正常的,直接的或明确的”列表中没有项目填充“ - 超出逻辑定律的绝对逻辑等价,两种表达方式非常接近并且大致相同在人类心理学方面也是等同的。