【发布时间】:2016-07-09 22:30:14
【问题描述】:
我可以在 Python 中做到这一点吗:
if not (list1, list2, list3):
...
检查所有给定的列表是否为空?
如果没有,我该怎么做?
【问题讨论】:
-
你的技术行不通,因为它是空列表的非空元组......但非空元组总是“真实的”。
标签: python if-statement operators
我可以在 Python 中做到这一点吗:
if not (list1, list2, list3):
...
检查所有给定的列表是否为空?
如果没有,我该怎么做?
【问题讨论】:
标签: python if-statement operators
if not (list1 + list2 + list3):
【讨论】:
具有至少一个元素的元组在布尔上下文中为真。这意味着not (list1, list2, list3) 始终是False。
由于空列表是虚假的,您可以使用内置的any函数,如下所示
if not any([list1, list2, list3]):
# ...
【讨论】:
解决办法是:
if not (list1 or list2 or list3):
【讨论】:
如果你想检查几个变量是否都是 None 或 False-like,你可以这样做:
if not any(list1, list2, list3):
print("All lists are empty")
但是,这不适用于包含所有类似 false 值的列表(None、False、""、[] 等...)。如果你想这样做,你可以这样做:
def allitems(lst):
for x in lst:
if isinstance(x, (list, tuple)):
for y in allitems(x):
yield y
else:
yield x
list1 = [None, [False], [False, [False, [None, False], False, None], [False, None]], False]
print(any(allitems(list1))) # => False
这也适用于递归列表/元组。它确保其中的所有值都是 False-like。
【讨论】:
最流畅的方法是使用all高阶函数:
这个检查在逻辑上更正确,因为它以一种可读的方式说明了你的意思。
【讨论】: