我常常落得像在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