Python in
演算子を使用してリスト/タプルsltn
に整数0、1、2が含まれていることを確認するにはどうすればよいですか?
私は以下を試しました、なぜ両方が間違っているのですか?
# Approach 1
if ("0","1","2") in sltn:
kwd1 = True
# Approach 2
if any(item in sltn for item in ("0", "1", "2")):
kwd1 = True
更新:なぜ変換しなければならなかったのか("0", "1", "2")
のいずれかのタプルに(1, 2, 3)
?またはリスト[1, 2, 3]
?
if ("0","1","2") in sltn
sltn
リストにタプル("0","1","2")
が含まれているかどうかを確認しようとしていますが、そうではありません。 (3つの整数が含まれています)
しかし、 #all() を使用してそれを完了することができます:
sltn = [1, 2, 3] # list
tab = ("1", "2", "3") # Tuple
print(all(int(el) in sltn for el in tab)) # True
in
キーワードを使用すると、オブジェクトの__contains__
メソッドを呼び出すことができます。
>>> a = [1, 2, 3]
>>> 2 in a
True
>>> a.__contains__(2)
True
したがって、("0","1","2") in [0, 1, 2]
は、タプル("0", "1", "2")
がリスト[0, 1, 2]
でcontainedであるかどうかを尋ねます。この質問に対する答えはFalse
です。 True
になるには、次のようなリストが必要です。
>>> a = [1, 2, 3, ("0","1","2")]
>>> ("0","1","2") in a
True
タプルの要素は文字列であることにも注意してください。タプルの要素の一部またはすべてがこれらの要素を整数に変換した後-がリストに含まれているかどうかを確認する必要があります。
タプルのすべての要素が(整数として)リストに含まれているかどうかを確認するには、次を使用します。
>>> sltn = [1, 2, 3]
>>> t = ("0", "2", "3")
>>> set(map(int, t)).issubset(sltn)
False
タプルの要素(整数として)がリストに含まれているかどうかを確認するには、次を使用できます。
>>> sltn_set = set(sltn)
>>> any(int(x) in sltn_set for x in t)
True
そしてany
が実行する遅延評価を利用します。
もちろん、特別な理由がないのでタプルに文字列が含まれている場合は、(1, 2, 3)
およびintへの変換を省略します。
シーケンスにチェックする要素のallが含まれているかどうかを確認するには、all
の呼び出しでジェネレーター内包表記を使用できます。
if all(item in sltn for item in ("0", "1", "2")):
...
どちらかがリスト内にある場合は、代わりにany
を使用できます。
if any(item in sltn for item in ("0", "1", "2")):
...
ここで広く提案されているように、時間を無駄にしたくない、リスト内のすべてのデータを反復処理したくない場合は、次のようにします。
_a = ['1', '2', '3']
b = ['4', '3', '5']
test = set(a) & set(b)
if test:
print('Found it. Here it is: ', test)
_
もちろん、if set(a) & set(b)
を実行できます。私はデモンストレーションの目的でそれをしませんでした。 _&
_をand
に置き換えないでください。これらは2つの実質的に異なるオペレーターです。
上記のコードは次のように表示されます。
_Found it. Here it is: {'3'}
_