【问题标题】:Python's any() function on a list of lists gives weird outputs列表列表上的 Python 的 any() 函数给出了奇怪的输出
【发布时间】:2022-01-24 02:00:06
【问题描述】:

鉴于lists 中的list 名为a,我在探索any() 函数时得到以下输出。如果我能在理解这些输出背后的逻辑方面得到一些帮助,那就太好了。为什么有些输出是True,有些是False,尽管都应该是True

a = [[1,2,3], [0,3,6], 5, [4,5,7], [0,1,2]]

print(any(a) in [0,3,4,[5],100])
print(any(a) in [1,2,3,4,5])     # Gives True
print(any(a) in [4,5,7,6])       # Gives False
print(any(a) in [0,1,2,4])       # Gives True
print(any(a) in [5])             # Gives False

【问题讨论】:

    标签: python python-3.x any


    【解决方案1】:

    您的语法错误。您首先计算any(a)(即True),然后检查True 是否在您的目标列表中。它有时返回True的原因是int(True)等于1,所以如果你的目标列表包含1,它只会打印True

    试试这个,例如:

    print(any(x in [4,5,7,6] for x in a))     # Should print True
    

    【讨论】:

      【解决方案2】:

      其实不是any的作用,而是python中in算子的作用。

      基本上in 的工作方式如下:-

      for i in iterable:
          if i == value:
              return True
      else:
          return False
      

      现在,如果您在返回 True 的条件之一上手动应用此逻辑,您可以找到导致这种特殊行为的元素:-

      for i in [1,2,3,4,5]:
          if i == True: # Since any(a) is True
              print(i)
      

      这产生的输出是:-

      1
      

      因此,您可以从中推断出一件事,整数 1 也代表布尔值 True,您可以通过查看交互式 shell 来确认:-

      因此,您可以观察到,在 python 中,整数 01 也分别代表布尔值 FalseTrue

      因此,现在您可以理解为什么您的代码会以一种特殊的方式执行,就像这样......

      a = [[1,2,3], [0,3,6], 5, [4,5,7], [0,1,2]]
      
      print(any(a) in [0,3,4,[5],100]) # Will give False because 1 is NOT present
      print(any(a) in [1,2,3,4,5])     # Gives True because 1 is present
      print(any(a) in [4,5,7,6])       # Gives False because 1 is NOT present
      print(any(a) in [0,1,2,4])       # Gives True because 1 is present
      print(any(a) in [5])             # Gives False because 1 is NOT present
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多