2017-03-07 125 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列表內不使用的元素,但單個字符串或整數。我無法使用for循環來使用.count()來索引單詞的元素。 Counter也是如此,它似乎不適用於嵌套列表或for循環。

我可以考慮使用字典,但最終我想new_one是列表的列表,因爲我想以後將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

當然!!如果「one」是蘋果,蘋果,梨,熊,梨,蘋果,抽屜,熊,葡萄等],則輸出在包含梨的新插槽中將包含1。嘗試一下! :) –

+0

哦,好吧,會有一種方法來計算他們雖然......?對於蘋果,返回兩個? – song0089

0

要做到這一點,最簡單的方法是使用嵌套列表理解:

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

這樣做效率稍低,因爲它每次都會計算每個詞的出現次數(例如,它會執行兩次word.count('apple')),但是如果你的列表不是很長,那就不成問題了。

+0

這裏是什麼字?如果它涉及到嵌套列表,它就不起作用。 – song0089

0

首先我們重複列表,即一個。對於每個列表我們迭代的元素,即蘋果梨熊等如果這匹配列表字,然後我們追加到臨時列表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]] 
相關問題