如果值等于值列表之一,是否有if语句返回True

问题描述

是否可以在python中执行类似的操作,如果一个值等于一组值中的一个,则if语句返回true(不使用or,然后复制第一个表达式和条件)?

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

这是一个没有列表理解的示例,但是我想在列表理解中使用类似的东西,考虑到它的全部目的是使代码更短。

li = [int + 1 for int in range(10) if int == 2,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 int in [2,3,5,8]。基本上是这样的: li = [int + 1 for int in range(10) if int in [2,8]]

或者当然是这样: li = [int + 1 for int in [2,8]]

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

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

另一方面,这个if n == 2,8无效的python。

附加:
int是一个内置变量,不应用作变量名。即使在语法上正确。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...