8

Python では、要素が 2 つのリストに含まれているかどうかを確認するには、次のようにします。

if elem in list1 and elem in list2:

この目的のために、次のことができますか?

if elem in (list1 and list2):
4

11 に答える 11

17

いいえ、あなたがすることはできません。

list1 and list2list1「空の場合、そうでない場合」を意味し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:

これはより簡単で、より高速です。

于 2013-05-16T20:06:57.990 に答える
4

いいえ、声明

if elem in (list1 and list2):

この指定された目的には機能しません。Python インタープリターが最初に行うことは、リスト 1 をチェックすることです。空のリストが見つかった場合 (つまり - False)、空のリストを返すだけです (なぜ? -Falseそして、何かが常に false になるので、さらにチェックする必要があるのはなぜですか? )。(なぜ? - 最初の値が の場合、式の結果は 2 番目の値に依存しTrueます。. これは短絡として知られています。list2TrueFalseFalseTrueif elem in list1if elem in list2

Short Circuiting に関する Wiki ページが参考になるかもしれません

例 -

>>> list1 = [1, 2]
>>> list2 = [3, 4]
>>> list1 and list2
[3, 4]

>>> list1 = []
>>> list2 = [3, 4]
>>> list1 and list2
[]
于 2013-05-16T20:14:43.163 に答える
3

いいえ、次のように記述できます。

{elem}.intersection (list1, list2)
于 2013-05-16T20:09:09.363 に答える
2

を使用するのはallどうですか?

all(elem in i for i in (list1, list2))

@DSM が指摘したように、必要はありませんzip

于 2013-05-16T20:14:24.703 に答える
1

問題のコード サンプルでは、​​ブール演算子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
于 2013-05-16T20:14:36.583 に答える
0

あなたはこれを行うことができます:

for item in list1:
    if item in list2: 
        print item
于 2014-10-20T05:28:11.307 に答える
0

(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"

「はい」を与える

于 2013-05-16T20:07:38.780 に答える