Python では、要素が 2 つのリストに含まれているかどうかを確認するには、次のようにします。
if elem in list1 and elem in list2:
この目的のために、次のことができますか?
if elem in (list1 and list2):
いいえ、あなたがすることはできません。
list1 and list2
list1
「空の場合、そうでない場合」を意味しlist2
ます。したがって、これはチェックしようとしているものをチェックしません。
対話型インタープリターで試してみてください。
これを行う簡単な方法は、既に持っているコードです。
if elem in list1 and elem in list2:
機能し、読みやすく、書くのは明らかです。何かを行うための明らかな方法がある場合、Python は通常、何のメリットももたらさない同義語を追加しないようにします。(「TOOWTDI」、または「それを行うための明白な方法が1つ、できれば1つだけあるはずです。」)
単に異なるのではなく、特定の方法でより良い答えを探している場合は、必要に応じてさまざまなオプションがあります。
たとえば、このチェックを頻繁に行う場合:
elems_in_both_lists = set(list1) & set(list2)
これで、次のことができます。
if elem in elems_in_both_lists:
これはより簡単で、より高速です。
いいえ、声明
if elem in (list1 and list2):
この指定された目的には機能しません。Python インタープリターが最初に行うことは、リスト 1 をチェックすることです。空のリストが見つかった場合 (つまり - False
)、空のリストを返すだけです (なぜ? -False
そして、何かが常に false になるので、さらにチェックする必要があるのはなぜですか? )。(なぜ? - 最初の値が の場合、式の結果は 2 番目の値に依存しTrue
ます。. これは短絡として知られています。list2
True
False
False
True
if elem in list1
if elem in list2
Short Circuiting に関する Wiki ページが参考になるかもしれません。
例 -
>>> list1 = [1, 2]
>>> list2 = [3, 4]
>>> list1 and list2
[3, 4]
>>> list1 = []
>>> list2 = [3, 4]
>>> list1 and list2
[]
いいえ、次のように記述できます。
{elem}.intersection (list1, list2)
問題のコード サンプルでは、ブール演算子and
はテストされた値の 1 つを返します ( Truth Value Testing )。そのため、それらの 1 つに対してのみテストすることになり、正しい結果が保証されるわけではありません。
>>> elem = 1
>>> list1 = [2, 3, 0]
>>> list2 = [1, 2, 3]
>>> if elem in (list1 and list2):
... print "IN"
...
>>> IN
あなたはこれを行うことができます:
for item in list1:
if item in list2:
print item
(list1 and list2)
ブール演算を評価し、最後のリストを返します -list2
両方に要素がある場合。
だから、いいえ、それはうまくいきません。
list1 = [1, 2, 3]
list2 = [2, 4, 5]
list1 and list2
[2, 4, 5] を与える
list2 and list1
[1, 2, 3] を与える
if 1 in (list1 and list2):
print "YES"
else:
print "NO"
いいえ
if 1 in (list2 and list1):
print "YES"
else:
print "NO"
「はい」を与える