3

と の 2 つのリストがqueryありlineます。私のコードは、次のような場合を見つけますquery

["president" ,"publicly"]

line次のような(注文事項)に含まれています。

["president" ,"publicly", "told"]

そして、これは私が現在使用しているコードです:

if ' '.join(query) in ' '.join(line)

問題は、単語全体のみを一致させたいということです。したがって、以下のクエリは条件ステートメントを渡しません。

["president" ,"pub"]

どうやってやるの?

4

8 に答える 8

1

楽しみのために、次のこともできます。

a = ["president" ,"publicly", "told"]
b = ["president" ,"publicly"]
c = ["president" ,"pub"]
d = ["publicly", "president"]
e = ["publicly", "told"]

from itertools import izip
not [l for l,n in izip(a, b) if l != n] ## True
not [l for l,n in izip(a, c) if l != n] ## False
not [l for l,n in izip(a, d) if l != n] ## False
## to support query in the middle of the line:
try:
  query_list = a[a.index(e[0]):]
  not [l for l,n in izip(query_list, e) if l != n] ## True 
expect ValueError:
  pass
于 2013-04-03T07:36:25.970 に答える
0

all組み込みの quantor 関数を使用できます。

if all(word in b for word in a):
    """ all words in list"""

これは、長いリストでは実行時間が効率的でない場合があることに注意してください。list for (検索する単語のリスト リスト) のset代わりに type を使用することをお勧めします。a

于 2013-04-03T07:32:55.897 に答える
0

これは、正規表現以外の方法です。正規表現はこれよりもはるかに高速になると確信しています:

>>> query = ['president', 'publicly']
>>> line = ['president', 'publicly', 'told']
>>> any(query == line[i:i+len(query)] for i in range(len(line) - len(query)))
True
>>> query = ["president" ,"pub"]
>>> any(query == line[i:i+len(query)] for i in range(len(line) - len(query)))
False
于 2013-04-03T07:40:30.103 に答える