8

重複の可能性:
Python 次のすべての項目がリストに含まれているかどうかを確認します

したがって、単語と単語1の両方がリストlstにあるかどうかをテストしたいと思います。もちろん、次のように書くこともできます。

if word in lst and word1 in lst:
    do x

しかし、そのステートメントを次のように短縮できるかどうか疑問に思いました。

if (word and word1) in lst:
    do x

もちろん、それは機能しませんが、効果的に似たようなものはありますか?

以下を試してみましたが、ご覧のとおり、目的の結果が得られません。

>>> word in lst
True
>>> word1 in lst
True
>>> (word, word1) in lst
False

編集:答えてくれてありがとう、私は今これを行う方法についてかなり良い考えを持っていると思います.

4

4 に答える 4

9

答えは正しいです(少なくともそのうちの1つは正しいです)。ただし、例が示すように、包含チェックを実行していて順序を気にしない場合、本当の答えは、セットを使用してサブセットをチェックする必要があるということです。

words = {"the", "set", "of", "words"}
if words <= set_of_words:
   do_stuff()
于 2012-09-04T21:28:06.450 に答える
8

単語のリストと、それらがリストに含まれているかどうかをチェックするジェネレータ式を作成します。

words = ["word1", "word2", "etc"]
lst = [...]
if all((w in lst for w in words)):
    #do something

alliterable のすべての値が true かどうかを調べます。ジェネレーターを使用しているため、これはまだ短絡が最適化されています。もちろん、ワンライナーには大きすぎない場合は、単語のリストをインライン化できます。

if all((w in lst for w in ["word1", "word2", "etc"])):
     ...
于 2012-09-04T21:20:45.257 に答える
2

あなたはそのようにそれをすることができます:

if all(current_word in lst for current_word in (word, word1)):
  do x
于 2012-09-04T21:24:44.177 に答える
1

注:これは絶対に使用しないでください。ここでは、Pythonの「さらに別の」機能を説明します。

効率の悪い解決策:

>>> from itertools import permutations
>>> lis=[0,1,2,3,4]
>>> (1,2) in (z for z in permutations(lis,2)) #loop stops as soon as permutations(lis,2) yields (1,2)
True
>>> (1,6) in (z for z in permutations(lis,2))
False
>>> (4,2) in (z for z in permutations(lis,2))
True
>>> (0,5) in (z for z in permutations(lis,2))
False
>>> (0,4,1) in (z for z in permutations(lis,3))
True
>>> (0,4,5) in (z for z in permutations(lis,3))
False
于 2012-09-04T21:44:35.197 に答える