我常常落得像在Python中,有什么其他方法可以编写if x == 1或x == 5或x == 10 ...?
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
在英语这似乎是多余的不断重复x
编写代码,有没有写出来的if语句一样,更容易或更短的方法是什么?
也许检查存在x
的值在一个元组(1, 5, 10, 22,)
什么?
我常常落得像在Python中,有什么其他方法可以编写if x == 1或x == 5或x == 10 ...?
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
在英语这似乎是多余的不断重复x
编写代码,有没有写出来的if语句一样,更容易或更短的方法是什么?
也许检查存在x
的值在一个元组(1, 5, 10, 22,)
什么?
是的,你是对的 - 无论是在一个元组中,或者(如果这个检查是重复进行的)。
因此,无论做
if x in (1, 5, 10, 22):
pass
,或者,如果你经常这样做检查和值的数量足够大,
myset = set((1, 5, 10, 22))
[...]
if x in myset:
pass
的myset
东西是比较有用的,更多的价值,你想检查。 4值很少,所以你可以保持简单。 400的值,你应该使用该集合...
正如Marcin所指出的,另一个方面是在集合中查找所需的散列,这可能比线性搜索列表或元组所需的值更昂贵。
在Python 2.7/3. *中,您也可以使用set literal:'{1,5,10,22}'。在Python 3.2+中,如果您只是在进行'in'检查(即使不是将结果保存在变量中),它甚至会优化为透明地使用'frozenset'。 – Dougal 2012-04-08 18:52:39
+1首先建议设置,但我必须同意Dougal的意见,如果可能的话,您应该使用新的语法。 – 2012-04-08 18:57:43
'set((1,5,10,22))'比'{1,5,10,22}'有更多的版本,而且实际上并不是那些更具可读性的恕我直言。 – martineau 2012-04-08 20:29:20
可以使用in
一个集合:
if x in [1, 5, 10, 22]:
# etc...
if x in {1, 5, 10, 22}: # New syntax for creating sets
# etc...
注意,这将每行执行时创建一个新的列表。如果效率是一个问题,只需创建一次该集合并重用它。
如果你需要性能良好,要重复相同的比较好几次,使用一组:
s = frozenset([1, 5, 10, 22]) # at the beginning
if x in s: # in your code
pass
呀,'如果x [1,50,10,22]'是简单的写并按照我的写法阅读 – 2012-04-08 18:49:26