【问题标题】:Is There a Way for an If Statement to Return True if a Value is Equal to One of a List of Values Python如果值等于值列表中的一个 Python,if 语句是否有方法返回 True
【发布时间】:2020-12-10 12:34:59
【问题描述】:

有没有办法在python中做这样的事情,如果一个值等于一组值中的一个,if语句返回true(不使用or然后复制第一个表达式和条件) ?

li1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
li2 = []
for n in li1:
    if n == 2, 3, 5, 8:
        li2.append(n)

这是一个没有列表理解的示例,但考虑到它的全部意义在于使代码更短,我希望有类似的列表理解。

li = [int + 1 for int in range(10) if int == 2, 3, 5, 8]

但我还没有找到任何可以做到这一点的东西。我知道你可以使用or 做这样的事情,

li = [int + 1 for int in range(10) if int + 1 == 2 or int + 1 == 3 or int + 1 == 5 or int + 1 == 8]

但它看起来很长。我尝试了很多方法,例如使用列表、元组、range()or(不复制第一个表达式和条件)等。它要么只是说语法无效,要么没有做正确的事情。我真的不知道如何表达这个问题,所以我不能使用谷歌搜索。

如果有人知道这是否可以做到,请提前谢谢! :)

【问题讨论】:

  • 你的意思是if n in {2,3,5,8}

标签: python list if-statement list-comprehension


【解决方案1】:

有多种方法可以做到这一点。
一种是使用if int in [2, 3, 5, 8]。基本上是这样的: li = [int + 1 for int in range(10) if int in [2, 3, 5, 8]]

当然也可以这样: li = [int + 1 for int in [2, 3, 5, 8]]

如果您想要更复杂的条件,也可以使用 lambda:
li = [int + 1 for int in range(10) if (lambda x: x % 3 == 0)(int)]
你不需要一个 lambda,但这会测试你的 int 是否是三的倍数。

关于 lambda 的一些想法:这里的 lambda 并没有真正的意义,因为你可以只写 int % 3 == 0 而没有 lambda。我不想详细介绍 lambda,因为这超出了范围。因此,如果您想要一些关于如何/何时使用它们的好例子,请查看this answer

另一方面,这个if n == 2, 3, 5, 8 不是有效的python。

补充:
int 是一个内置函数,不应用作变量名。即使它在语法上是正确的。

【讨论】:

  • int 是一个重要的内置函数,它不应该用作变量名。在循环中定义并立即调用的 lambda 没有什么意义。
  • @VPfB 你是对的,你不应该不使用int 作为变量名,我不会,但它在语法上是正确的。是的,那里的lambda 没有多大意义,它更像是一个例子。
  • @toydarianThe OP 显然处于学习阶段。在我看来,他不应该以这种方式学习使用 lambda。如果它在循环之前定义一次并在循环中重复使用,那将是有意义的。
  • @VPfB 可能是对的,我在这个主题上添加了一些内容。
  • @toydarian 我在想因为 int 是一个类,所以它基本上是一个不使用 if 的 if 语句,它会从列表中获取所有整数。当然,考虑到它来自一个范围,我并不真正需要它。我想我需要添加if str(n).isdigit() 才能做到这一点?
【解决方案2】:
li = [int + 1 for int in range(10) if int + 1 in [2, 3, 5, 8]]

【讨论】:

  • 我真的没想过在 if 语句中使用 in。谢谢!
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多