【问题标题】:Issue with the Python any() functionPython any() 函数的问题
【发布时间】:2021-10-07 19:54:35
【问题描述】:

如果单个列表中的 any 元素为 1,则我正在尝试将列表列表转换为带有 '1' 的单个列表,否则为 0。我有以下清单:

result =[[-1, -1, 0], [1, 0, -1], [1, 1, 0]]

如果我在第一个列表中使用any()

result[0],即使它应该是错误的,我也得到了 True。 any(result[0]) 给了True

但是,当我分别测试每个元素时,我在每种情况下都得到 False

result[0][0] == True 给出了 False 和其余元素的类似结果。我似乎无法理解我做错了什么。

【问题讨论】:

  • 为什么在第一个列表中任何应该是假的?测试 bool(-1)
  • result[0][0] 将返回 -1。为什么 -1 == True 是真的?您的第一个和第二个假设都是错误的
  • 看看Truthy and Falsy Values in Python应该能解释这里的问题,让你更好地理解手头的问题。

标签: python list any


【解决方案1】:

any 测试任何值是否为真,而不是任何值等于True。所有非零整数都是真实的,所以any([-1, -1, 0])True

详情请参阅Truth Value Testing,它也适用于anyall

【讨论】:

    【解决方案2】:

    首先,为什么你的尝试没有成功:

    bool(X) = True if x != 0; else False.
    

    那么any(result[0]) 将返回 True,因为列表中至少有一个非零元素。

    你的第二个测试result[0][0] == True 不能工作,因为result[0][0] = -1,然后不是True(实际上甚至不是布尔值)。所以它返回False

    要做你想做的事,你可以使用any 和列表理解:

    result = [1 if any(y == 1 for y in x) else 0 for x in result]
    >>> [0, 1, 1] For your example
    

    编辑: 根据凯利邦迪的评论,另一种方法:

    result = [1 if 1 in x else 0 for x in result]
    

    也可以使用布尔值,但只能达到 True/False(或 1/0)

    【讨论】:

    • 或者干脆[int(1 in x) for x in result]
    • 哦,不知道这是可能的。谢谢。但是,这种方法只允许达到 0 & 1 (int(True/False)),一个 if/else 子句允许得到你想要的任何值
    猜你喜欢
    • 2014-02-05
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多