2014-01-08 103 views
0

我有以下問題,我將不勝感激的一些幫助。蟒蛇計數排除特定對象

a =[['911', 'strength', 'Bolero lists 12 pounds hassle free and stress free.'], ['912', 'power', 'Bolero lifts free weights.']] 

b = ['free', 'Bolero', 'pounds'] 

我正在做的是追加b的點擊次數到a中。請參閱下面的代碼:

c = [] 


for sent in a: 
    o = 0 
    for i in sent: 
     o +=sum(i.count(col) for col in b) 
    c.append((sent, o)) 

結果是:

c =[(['911', 'strength', 'Bolero lists 12 pounds hassle free and stress free.'], 4), (['912', 'power', 'Bolero lifts free weights.'], 2)] 

的棘手的事情是試圖從列表B中的計數爲「自由」排除「無憂無慮」。

因此,在本質結果集將是:

c =[(['911', 'strength', 'Bolero lists 12 pounds hassle free and stress free.'], 3), (['912', 'power', 'Bolero lifts free weights.'], 2)] 

謝謝。

+2

爲什麼第二個'1'?爲什麼要排除「無憂無慮」?你想只匹配一個單詞嗎? –

+0

感謝您指出。這是一個錯字。 – BlackHat

+0

從'sum'中減去i.count(「無憂」)? 'o + = sum(i.count(col)for col in b) - i.count(「無憂無慮」)' –

回答

1

如果您想要從a的每個字符串中刪除"hassle free"個計數。你可以在for循環。減去它:

for sent in a: 
    o = 0 
    for i in sent: 
     o += sum(i.count(col) for col in b) 
     o -= i.count("hassle free") 
    c.append((sent, o)) 

輸出:

[(['911', 'strength', 'Bolero lists 12 pounds hassle free and stress free.'], 3), (['912', 'power', 'Bolero lifts free weights.'], 2)] 
+0

非常感謝你們基督徒! – BlackHat

+0

好的基督教徒,你走過去的方式打開了很多的可能性。我知道這對你來說微不足道,但這絕對有幫助。我現在可以在排除列表中添加更多短語。謝謝。 – BlackHat

0

如果你想countb只有一次的每個項目,你可以這樣做:

for sent in a: 
    o = 0 
    for word in b: # loop over b, so each item counted only once 
     for s in sent: # work through sentence 
      if word in s: 
       o += 1 
       break # add one only 
    c.append((sent, o)) 

可以使用列表理解縮短:

c = [(sent, sum(any(word in s for s in sent) for word in b)) for sent in a] 
+0

說真的,你們太棒了。 – BlackHat

+0

謝謝喬恩!這非常有幫助。 – BlackHat