4 回答
TA贡献1934条经验 获得超2个赞
假设您只处理一层嵌套,您可以简单地map any()进入列表项并采取any()以下措施:
b = [[False, False], [False, False]]
any(map(any, b))
# False
c = [[False, False], [False, True]]
any(map(any,c))
# True
当然,如果您的项目可以任意嵌套,则需要多几行代码。
b = [[False, False], False, [False, [False, True]]]
c = [[False, False], False, [False, [False, False]]]
def any_nested(item):
if not isinstance(item, list):
return bool(item)
return any(map(any_nested, item))
any_nested(b)
# True
any_nested(c)
# False
TA贡献2003条经验 获得超2个赞
您可以使用itertools中的chain.from_iterable来展平嵌套列表。如果你将它传递给,你会得到你想要的结果。这适用于任何级别的嵌套,而不仅仅是两个。any
>>> from itertools import chain
>>> b = [[False, False], [False, False]]
>>> any(chain.from_iterable(b))
False
>>> c = [[False, False], [False, True]]
>>> any(chain.from_iterable(c))
True
TA贡献2080条经验 获得超4个赞
如果传递列表中的任何元素为真,则 any() 函数返回真
在您的情况下,您有两个嵌套列表,并且您正在调用any()主列表。从技术上讲,您的主要列表是True,因为它包含两个具有元素的列表。
# Empty list returns False as no elements exist
bool([])
False
# List with one element returns True
bool([0])
True
# Even with the list containing False, the list is `True` because it contains an element.
bool([False])
True
any()接受一个可迭代对象,并检查所述可迭代对象中的任何值是否为True或False。
您正在传递两个列表,每个列表中都有一个元素,导致返回True,您的代码从未真正检查嵌套列表中的值是否为True或False
bool([False, False])
True
如果你遍历嵌套列表的内容,你会得到一个返回False
for item in b:
any(item)
False
False
添加回答
举报
