嵌套列表上的 Python any() 函数返回不正确的值

您好我正在尝试在 python 中使用 any() 函数。通过阅读文档,只要列表中有 True,该函数就应该返回 True。然而,在我下面的嵌套列表中,尽管列表中没有 True 值,但该函数返回 true。


b = [[False, False], [False, False]]

print(any(b))

印刷 True


如果列表中的所有值都是 False,我试图返回 False,如果任何值为 True,则返回 True,因此否定它不起作用。我该如何解决?谢谢您的帮助。


神不在的星期二
浏览 207回答 4
4回答

ABOUTYOU

怎么做any(any(x) for x in b)这将检查列表中的每个列表是否为真,然后检查这些结果是否为真

撒科打诨

假设您只处理一层嵌套,您可以简单地map any()进入列表项并采取any()以下措施:b = [[False, False], [False, False]]any(map(any, b))# Falsec = [[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)# Trueany_nested(c)# False

湖上湖

您可以使用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

犯罪嫌疑人X

如果传递列表中的任何元素为真,则 any() 函数返回真在您的情况下,您有两个嵌套列表,并且您正在调用any()主列表。从技术上讲,您的主要列表是True,因为它包含两个具有元素的列表。# Empty list returns False as no elements exist   bool([])False# List with one element returns Truebool([0])True# Even with the list containing False, the list is `True` because it contains an element.bool([False])Trueany()接受一个可迭代对象,并检查所述可迭代对象中的任何值是否为True或False。您正在传递两个列表,每个列表中都有一个元素,导致返回True,您的代码从未真正检查嵌套列表中的值是否为True或Falsebool([False, False])True如果你遍历嵌套列表的内容,你会得到一个返回Falsefor item in b:    any(item)FalseFalse
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python