2017-03-07 4 views
0

ネストされたリスト内の単語が別の単語リストに基づいて何回出現したかをカウントしようとしています。たとえば:別のリストに基づいてネストされたリスト内の要素をカウントする

one = [['apple','pear','bear'],['apple','drawers','bear','grapes']] 
word = ['pear','oranges','pineapple','scones','drawers'] 

私は、リストの単語内の各単語がoneと呼ばれる各ネストされたリストで発生する回数をカウントします。

new_one = [[0,1,0],[0,1,0,0]] 

は、私は、リスト内の要素を使用していませんが、.count.countを使用してみましたが、単一の文字列または整数:出力として私が欲しいです。 .count()を使って単語の要素をインデックスするためにforループを使用できませんでした。同じことがCounterのためのもので、ネストされたリストやforループ内では機能しないようです。

辞書を使うと思うかもしれませんが、後でnew_oneを1つの行が行列の行である行列に変更したいので、最終的にnew_oneをリストのリストにします。

答えて

0
one = [['apple','pear','bear'],['apple','drawers','bear','grapes']] 
word = ['pear','oranges','pineapple','scones','drawers'] 
output = [] 

# create a dict and populate with keys being unique words and values being its occurances 
d = {} 

for x in one: 
    for y in x: 
     d[y] = word.count(y) 

# go through each word in sublist and find the count from the dict 
for x in ne: 
    output.append([d[y] for y in x]) 

これはあなたを与える必要があります。ここでは

output = [[[0, 1, 0], [0, 1, 0, 0]]] 
0

が可能なアプローチである:

[[[1 if z == x else 0 for z in y] for y in one] for x in word] 

出力:これを行うには

[[[0, 1, 0], [0, 0, 0, 0]], 
[[0, 0, 0], [0, 0, 0, 0]], 
[[0, 0, 0], [0, 0, 0, 0]], 
[[0, 0, 0], [0, 0, 0, 0]], 
[[0, 0, 0], [0, 1, 0, 0]]] 
+0

これは素晴らしいですが、りんごが二回発生したときに、この仕事はできましたか? – song0089

+0

もちろん! 「1」が「apple」、「pear」、「bear」、「pear」、「apple」、「drawers」、「bear」、「grapes」]の場合、出力'pear'が新しいスロットに1を含むでしょう。それを試してみてください! :) –

+0

オハイオ州オクラホマ、それらを数える方法があるだろう...?リンゴのために、2つを返しますか? – song0089

0

最も簡単な方法は、使用することですネストされたリストの理解:

[[word.count(w) for w in l] for l in one] 

これは、毎回各単語の出現回数をカウントするため、わずかに非効率的です(例: word.count('apple')を2回実行します)、リストがあまり長くない場合は問題にはなりません。

+0

ここに言葉は何ですか?ネストされたリストを参照すると、それはうまく動作しません。 – song0089

0

まず、アウトリスト、つまり1を繰り返します。 1つのリストのそれぞれに対して、要素、すなわちapple pear bearなどを繰り返します。これがリスト単語に一致する場合、一時的なリストnew_one_tempに追加します。それぞれの外側の反復で、new_oneリストに追加します。

one=[['apple','pear','bear'],['apple','drawers','bear','grapes']] 
word=['pear','oranges','pineapple','scones','drawers'] 

new_one=[] 
for list_elem in one: 
    new_one_temp=[] 
    for word_text in list_elem: 
     if word_text in word: 
      new_one_temp.extend([1]) 
     else: 
      new_one_temp.extend([0]) 
    new_one.append(new_one_temp) 
print new_one 

出力

new_one = [[0, 1, 0], [0, 1, 0, 0]] 
関連する問題