2017-05-10 7 views
-1

私は奇妙なことを偶然見つけました。if '' in lstです。 コード怒鳴るは私に出力を提供します:空の文字列がリストに入っているかどうかをチェックする

1 - yes 
2 - no 
3 - yes 

1yesである理由を教えてもらえますか?

######################################## 
if '' in ('a'): 
    print('1 - yes') 
else: 
    print('1 - no') 


######################################## 
if '' in ('a', 'b', 'c'): 
    print('2 - yes') 
else: 
    print('2 - no') 


######################################## 
if '' in (''): 
    print('3 - yes') 
else: 
    print('3 - no') 

答えて

4
>>> print(type(('a'))) 
<class 'str'> 

だからあなたは何が起こったのか理解できました。 ('a')は自動的に文字列に変換されるため、if '' in ('a')if '' in 'a'に等しく、すべての文字列に空の文字列があります。

4
if '' in ('a'): 
    print('1 - yes') 
else: 
    print('1 - no') 

空の文字列が('a')以降の文字列aに含まれている場合は、テストしているがタプルではない、それは単に文字列'a'です。空文字列は、空でない他の文字列に常に含まれるとみなされます。

文字列'a'のみを含むタプルを作成する場合は、('a')('a',)に変更する必要があります。

4

('a')は文字列で、'a'に簡素化され、すべての文字列には空の文字列が含まれます。タプルを作った場合、のようにFalseが得られます。 -

3

あなたはこのように行っているはずです

if '' in ('a',): 
    print('1 - yes') 
else: 
    print('1 - no') 

('a')('a',)あなたはそれを取ることができるタプル

1

ある文字列'a'以外の何ものでもありません:2番目の例では

'a' = '' + 'a' + '' 

- ''はリストの要素ではありません。要素は 'a'、 'b'、 'c'です。

2

Empty stringsは、常に他のstringsubstringとみなされます。

>>> 'a'.find('') 
0 

''を意味'a'に存在するので、'' in ('a')True

あります
関連する問題