2017-09-04 5 views
-3

別のリスト(Y)に表示されている1つのリスト(X)の単語を数えようとしています。繰り返すリストには、複数の単語が1つの文字列に含まれています。サブストリングとストリングの両方がリストである場合、ストリング内のサブストリングの数を調べるにはどうすればよいですか?

例:私が試した何

def = 2 
xyz = 2 
abc = 2 

for obj in X: 
    for item in Y: 
     if obj in item: 
      freq = obj.count(item) 
      print (freq) 

私もリストを試してみましたY項目の

数:

X = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def'] 

Y = ['def', 'xyz', 'abc', 'tuv'] 

OUTPUTのようなものでなければなりません理解しかし、私はそれがそうでないと信じています。

+0

してください、あなたはこの問題を解決しようとしている方法を示しています。印刷し

for k, v in counts.items(): print('{} = {}'.format(k, v)) 

。 – VMRuiz

+0

私はこれを議論の対象外としていると投票しています –

+0

SOはコード作成サービスではありません –

答えて

0

わかりませんあなたは必要です(あなたの例ではdef = 2ではありません)が、これはあなたが必要とするものに近いと思う:

from collections import defaultdict 
from itertools import product 

counts = defaultdict(int) 
for x, y in product(X, Y): 
    if y in x: 
     counts[y] += 1 

あなたが実行して出力を確認することができます。

def = 2 
abc = 2 
xyz = 2 
1

あなたができることは、Xリストを繰り返して、スペースで分割するように文字列を操作することです(各単語を区切るように)し、Counterクラスを使用して項目の存在のみをカウントするdictをY

内蔵 sum()機能使用
>>> import itertools 
>>> from collections import Counter 
>>> c = Counter() 
>>> for word in X: 
     words = word.split(' ') 
     words = [w for w in words if w in Y] 
     c.update(words) 

>>> c 
Counter({'xyz': 3, 'abc': 3, 'def': 3, 'tuv': 1}) 
2

ショート一行溶液:

x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def'] 
y = ['def', 'xyz', 'abc', 'tuv'] 
result = {i: sum(w.count(i) for w in x) for i in y} 

print(result) 

出力:

{'def': 2, 'xyz': 2, 'tuv': 0, 'abc': 2} 

----------

それともcollections.Counterオブジェクトを持つ:

import collections 
x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def'] 
y = ['def', 'xyz', 'abc', 'tuv'] 

c = collections.Counter(' '.join(x).split()) 
result = {i: c[i] for i in y if i in c} 

print(result) 

出力:私は正確に何を取得する場合

{'abc': 2, 'def': 2, 'xyz': 2} 
+0

'abc def ghi klm 'を単一の要素としてチェックするので、' sum() 'onelinerは動作しません。 – Vinny

+0

@Vinny、間違っている、' i in w' exの場合はチェックします。 'def'は' abc def ghi klm'で発生します。単一の 'x'項目に繰り返しの' y'項目が含まれている場合にのみ疑念が生じるかもしれません。私はそのような入力とそのような状態を見ません。したがって、それは動作します(OPが新しい条件を宣言するまで) – RomanPerekhrest

+0

@Vinny、さらに、単一の 'x'アイテムが繰り返される' y'アイテムを含む場合、潜在的なケースについての 'sum'アプローチを拡張しました。間違いなく動作します – RomanPerekhrest

関連する問題