2017-01-17 14 views
6
l = ["a", "b", "c", "d", "e"] 
if "a" in l and "b" in l and "c" in l and "d" in l: 
    pass 

このif文を書くにはどうすればよいでしょうか?Pythonのif文の短縮方法

が試み:

if ("a" and "b" and "c" and "d") in l: 
    pass 

しかし、これは正しくないようです。正しい方法は何ですか? パイソン3

+4

? –

+4

2番目のスニペットは '' in l: ''に評価されます。 – jonrsharpe

答えて

11

アイデアはall(..)と発電機を使用するかもしれない:

if all(x in l for x in ['a','b','c','d']): 
    pass 

すべてがbool(..)Trueで、すべての要素の反復可能放射する入力として反復可能とチェックの任意の種類を取ります。

allの中には、発電機を使用しています。それは、このように<other-iterable>内のすべての要素を取り、それに<expr>を呼び出します(無括弧付き)

<expr> for <var> in <other-iterable> 

:のように発電機が動作します。この場合<expr>x in lであり、そしてx<var>ある:

#   <var> 
#   | 
x in l for x in ['a','b','c','d'] 
#\----/   \---------------/ 
#<expr>   <other-iterable> 

generatorsのさらなる説明。

+3

非常にきれいな説明 –

+1

@MoinuddinQuadri:あなたのようなコメントありがとう:)。 –

5
l = "abcde" 
if all(c in l for c in "abcd"): 
    pass 
+2

私はOPがここでは1文字の文字列で例を挙げていると思いますが、実生活では多分複数の文字列に対してチェックしますが、それでも良い答えです。 –

6

あなたがセットを使用することができる:

l = { 'a', 'b', 'c', 'd', 'e' } 

if { 'a', 'b', 'c', 'd' } <= l: 
    pass 
4

異なるアプローチは、セットを使用している:

l = ['a', 'b', 'c', 'd', 'e'] 
if set(['a', 'b', 'c', 'd']).issubset(set(l)): 
    pass 
関連する問題