在Python中,还有什么其他方法可以编写if x == 1或x == 5或x == 10 ......?

hob*_*es3 9 python if-statement

我经常最终编写代码

if x == 1 or x == 5 or x == 10 or x == 22 :
    pass
Run Code Online (Sandbox Code Playgroud)

在英语中,继续重复似乎是多余的x,是否有更容易或更短的方式来写出这样的if语句?

也许x在一个元组( 1, 5, 10, 22, )或其他东西中检查存在的价值?

glg*_*lgl 14

是的,你是对的 - 无论是在一个元组中还是(如果重复进行此检查).

所以要么这样做

if x in (1, 5, 10, 22):
    pass
Run Code Online (Sandbox Code Playgroud)

或者,如果您经常检查并且值的数量足够大,

myset = set((1, 5, 10, 22))

[...]

if x in myset:
    pass
Run Code Online (Sandbox Code Playgroud)

myset东西是要检查的更实用,更值.4个值非常少,因此您可以保持简单.400个值,你应该使用集...

正如Marcin所指出的,另一个方面是在集合中进行查找所必需的散列,这可能比线性搜索列表或元组的所需值更昂贵.

  • 在Python 2.7/3.*中,您还可以使用set literal:`{1,5,10,22}`.在Python 3.2+中,如果你只是在进行`in`检查,这甚至可以优化使用`frozenset`(尽管如果你将结果保存在变量中). (7认同)
  • +1首先建议设置,但我必须同意Dougal你应该尽可能使用新语法. (2认同)

Mar*_*ers 6

您可以使用in集合:

if x in [1, 5, 10, 22]:
     # etc...

if x in {1, 5, 10, 22}:  # New syntax for creating sets  
     # etc...
Run Code Online (Sandbox Code Playgroud)

请注意,每次执行该行时都会创建一个新列表.如果要考虑效率,只需创建一次集合并重复使用它.