[英]How to get frequency of words in list from a string?
假設我有一個單詞列表和一個字符串。 我想要一個新數組來表示單詞列表中字符串中每個單詞的頻率。 此外,單詞的每個索引應該相同,並且數組的長度與listWords
相同。
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']
string = "Cup Noodles Chicken Vegetable Noodles"
結果數組應如下所示:
每個索引代表列表中每個單詞出現的頻率,否則為 0
result = [2, 0, 0, 0, 1, 0, 0, 0]
您可以拆分句子並將其傳遞給Collections.counter()
。 有了它,您可以在單詞列表中查找計數。 例如:
from collections import Counter
string = "Cup Noodles Chicken Vegetable Noodles"
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']
counts = Counter(string.split())
[counts[word] for word in listWords]
# [2, 0, 0, 0, 1, 0, 0, 0]
當然,您可以在沒有Counter()
的情況下執行此操作。 您只需要處理第一次嘗試訪問密鑰時發生的KeyError
。 然后,您可以在查找單詞時使用get(word, 0)
返回默認值 0。 就像是:
string = "Cup Noodles Chicken Vegetable Noodles"
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']
counts = {}
for word in string.split():
try:
counts[word] += 1
except KeyError:
counts[word] = 1
[counts.get(word, 0) for word in listWords]
# still [2, 0, 0, 0, 1, 0, 0, 0]
由於您要求一種不使用計數器的方法,因此這里有一段可以工作的代碼,但不確定它的時間復雜度。
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']
indicies = {}
freq = [0]*len(listWords)
for i in range(len(listWords)):
indicies[listWords[i]] = i
string = "Cup Noodles Chicken Vegetable Noodles"
for word in string.split():
if word in indicies.keys():
freq[indicies[word]]+=1
print(freq)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.