我要檢查多個條件的if語句有沒有辦法在Python中的if語句中組合成員比較?
if a:
# do something
多個案件在這種情況下爲真== 1,A == 2,== 3
,而不需要編寫
if a == 1 or a == 2 or a == 3:
# do something
我想這樣
東西我要檢查多個條件的if語句有沒有辦法在Python中的if語句中組合成員比較?
if a:
# do something
多個案件在這種情況下爲真== 1,A == 2,== 3
,而不需要編寫
if a == 1 or a == 2 or a == 3:
# do something
我想這樣
東西只需添加到其他的答案,你最好的選擇肯定會是這樣的邏輯:
if a in set([1, 2, 3]):
#do something
或甚至更好
if a in {1, 2, 3}:
#do something
我想在這裏強調的事情是,你應該使用set
這種情況。查找會更有效率。
另外,python documentation推薦。
常見用途包括成員資格測試,從 序列刪除重複,以及計算的數學運算,例如路口, 集,差,和對稱差
你的第一個構造肯定會顯着*較慢:'set([1,2,3])'比簡單地檢查'[1,2,3]'中的成員資格,因爲它必須每次構建集合* 。使用set-literal!然後編譯器可以優化!的確,'[1,2,3]'中的x和set([1,2,3])中的'x之間的差異比[1,2,3]中的x之間的差異大得多* '和'x in {1,2,3}' –
這就是我提出第二種解決方案的原因。正如我所說的,我的目標是讓他深入瞭解如何輕鬆優化解決方案。但你有一個好點,我會更新。 – scharette
最簡單的事情寫的是if a in (1, 2, 3)
什麼你試圖寫可以寫成
if any(a == condition for condition in [1, 2, 3])
您是在正確的道路上的一種。什麼是需要的是:
if a in [1,2,3]:
do something
作爲替代
if a == 1 or a == 2 or a ==3:
由於jonrsharpe正確地指出,也許你正試圖
if any(a==condition for condition in [1,2,3]):
這也是以同樣的方式。
The truth value of an array with more than one element is ambiguous
看起來像一個numpy錯誤消息。如果a
是numpy ndarray並且b包含您正在測試的值,則可以這樣做。
import numpy as np
a = np.arange(6)
b = np.array([6,2,9])
if np.any(a == b[:, None]):
...
或
np.any(a[:,None] == b)
它利用的broadcasting。
你的異常可以使用我陣列再現......
>>> if a == b[:, None]:
pass
Traceback (most recent call last):
File "<pyshell#281>", line 1, in <module>
if a == b[:, None]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>>
當然不是標準的python,如果[1,2,3]中的條件[==]條件無效語法 –
確實我的問題是,我的「a」有多個值,我不知道 – vanilla
@香草 - 當發生這樣的意外事件時,通常有助於檢查操作數。一種方法是[catch the exception](https://docs.python.org/3/tutorial/errors.html#handling-exceptions)並在'except'套件中打印內容。另一個策略可能是[使用錯誤消息進行搜索](https://stackoverflow.com/search?q=ValueError%3A+The+truth+value+of+an+array+with+more+than+one+element是+模棱兩可。+用+ a.any()+或+ a.all())。 – wwii
'如果有的話(爲條件的條件==在[1,2,3]):'?但是你的錯誤並不是來自那個代碼。 – jonrsharpe
''帶有多個元素的數組的真值不明確''聽起來像是一個numpy錯誤消息。你是否正確地表示了你的數據? – wwii
@jonrsharpe:應該是'如果在[1,2,3]:' – hop