2014-07-25 10 views
0

我有時需要在一個條件裏使用的許多元素,都被同一種如何處理條件中的衆多元素?

args = list() 
if "a" not in args or "b" not in args or "c" not in args: 
    print("something is missing") 

當元素的測試數量變大這變得複雜。我想他們在一個列表結合,但最終的結果是醜陋:

args = list() 
for what in ["a", "b", "c"]: 
    if what not in args: 
     print("something is really missing") 
     break 

這將是一個Python化的方式來編寫這樣的情況(幾部分組成,都是一樣的,到if)?

+3

'if not all(x in args for x in「abc」):'?或者你可以設置它們並使用['如果沒有設置(參數).issuperset(「abc」):'](https://docs.python.org/2/library/stdtypes.html#set.issubset) – jonrsharpe

回答

1

做到這一點,典型的方法是使用all

if not all(arg in args for arg in ("a", "b", "c")): 

此外,考慮提高一個錯誤,而不是打印的消息。

+0

是的,我將在實際程序中提出一個。這個一行代碼的構造非常有用,但我必須記住它(儘管我更喜歡更明確的代碼,這是我Perl時代的一個開始OK的創傷,然後出現了「簡化」和「單行」,並且代碼開始了自己的生活) – WoJ

+0

@WoJ如果這是你的偏好,那麼你現有的構造沒有任何問題! – jonrsharpe

+0

對不起,我在我的評論中不清楚。我正在準確地尋找你在答案中給了什麼,我只是不知道如何建立它(但已經看過幾次,我知道建築存在))。一般來說,我更願意在包裝過多的情況下小心謹慎,因爲我不明白我在一段時間後寫了什麼。儘管如此,你的回答是完美的,並且重要。 – WoJ

0

使用套將工作:

args = list(....) 
if set(["a","b","c"]).issubset(args): 
    print("something is really missing") 

這個作品,如果排序並不重要 - 即A,B,C可以在args任何順序存在,如果有可能在args其他事情(其它比,b,C)

+1

這應該是'set(「abc」)''或'set((「a」,「b」,「c」))',並且你缺少引號 – jonrsharpe