【问题标题】:Concise way to compare a variable against multiple values [duplicate]将变量与多个值进行比较的简洁方法[重复]
【发布时间】:2020-06-16 20:49:04
【问题描述】:

我一直在尝试了解是否可以使用类似于我在下面演示的内容的 if 语句。我的理解是不是?

for i in range(10):
  if i == (3 or 5) or math.sqrt(i) == (3 or 5):
    numbers.append(i)

使用这段代码,我只能得到数字39,而我应该得到3, 5, 9。在不列出下面的代码的情况下,还有其他方法吗?

for i in range(10):
  if i == 3 or i == 5 or math.sqrt(i) == 3 or math.sqrt(i) == 5:
    numbers.append(i)

【问题讨论】:

  • 你可以使用if i in [3, 5]等等

标签: python if-statement


【解决方案1】:

你可以使用in操作符:

for i in range(10):
  if i in (3, 5) or math.sqrt(i) in (3, 5):
    numbers.append(i)

或者如果您希望每个计算都在同一组结果中,您可以使用any()

results = [1, 2, ..., too long list for single line]
expected = (3, 5)

if any([result in expected for result in results]):
    print("Found!")

只是一个小问题,sqrt 很可能迟早会返回一个float,这种方法将来会很愚蠢,因此math.isclose() or others 将帮助您避免遇到浮动“错误”,例如:

2.99999999999999 in (3, 5)  # False

这会导致你的条件失败。

【讨论】:

    【解决方案2】:
    if i == (3 or 5) or math.sqrt(i) == (3 or 5):
    

    等价于

    if i == 3 or math.sqrt(i) == 3:
    

    导致 3 和 9 作为结果。
    这是因为3 or 5 被评估为 3,因为它是第一个非零数字 3(非零数字被认为是 True)。例如,0 or 5 将被评估为 5。

    【讨论】:

      【解决方案3】:

      我建议不要在这里使用“==”,而是使用“in”。这是代码:

      for i in range(10):
        if i in [3,5] or math.sqrt(i) in [3,5]:
          numbers.append(i)
      

      【讨论】:

        【解决方案4】:

        你可以像这样使用列表推导来做到这一点。

        import math as mt
        a=list(range(10))
        filtered_list=[x for x in a if x in [3,5] or mt.sqrt(x) in [3,5]]
        print(filtered_list)
        

        【讨论】:

          【解决方案5】:

          有一个:

          if i in (3,5) or math.sqrt(i) in (3,5):
          

          【讨论】:

          • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
          猜你喜欢
          • 2012-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多