为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2022-07-12 15:31:52
您好我正在尝试在 python 中使用 any() 函数。通过阅读文档,只要列表中有 True,该函数就应该返回 True。然而,在我下面的嵌套列表中,尽管列表中没有 True 值,但该函数返回 true。b = [[False, False], [False, False]]print(any(b))印刷 True如果列表中的所有值都是 False,我试图返回 False,如果任何值为 True,则返回 True,因此否定它不起作用。我该如何解决?谢谢您的帮助。
查看完整描述

4 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

怎么做

any(any(x) for x in b)

这将检查列表中的每个列表是否为真,然后检查这些结果是否为真


查看完整回答
反对 回复 2022-07-12
?
撒科打诨

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


查看完整回答
反对 回复 2022-07-12
?
湖上湖

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


查看完整回答
反对 回复 2022-07-12
?
犯罪嫌疑人X

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


查看完整回答
反对 回复 2022-07-12
  • 4 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号