9

我经常最终写出像这样的代码

if x == 1 or x == 5 or x == 10 or x == 22 :
    pass

在英语中,不断重复似乎是多余的x,有没有更简单或更短的方法来写出这样的 if 语句?

也许检查元组中是否存在x' 值( 1, 5, 10, 22, )或什么?

4

3 回答 3

14

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

所以要么做

if x in (1, 5, 10, 22):
    pass

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

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

[...]

if x in myset:
    pass

这些myset东西越有用,您要检查的值就越多。4个值很少,所以你可以保持简单。400个值,你应该使用集合......

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

于 2012-04-08T18:51:10.790 回答
6

您可以in与集合一起使用:

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

if x in {1, 5, 10, 22}:  # New syntax for creating sets  
     # etc...

请注意,这将在每次执行该行时创建一个新列表。如果效率是一个问题,只创建一次集合并重用它。

于 2012-04-08T18:48:50.447 回答
2

如果您需要良好的性能并且要多次重复相同的比较,请使用一组:

s = frozenset([1, 5, 10, 22]) # at the beginning

if x in s: # in your code
    pass
于 2012-04-08T18:51:41.010 回答