listin中list1的Python count元素出现

Dra*_*rys 3 python list counting

在下面的代码中,我想计算in word_list中每个单词的出现次数,test下面的代码可以完成这项工作,但可能效率不高,有没有更好的方法呢?

word_list = ["hello", "wonderful", "good", "flawless", "perfect"]
test = ["abc", "hello", "vbf", "good", "dfdfdf", "good", "good"]

result = [0] * len(word_list)
for i in range(len(word_list)):
    for w in test:
        if w == word_list[i]:
            result[i] += 1

print(result)
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 6

使用collections.Counter计算所有词语的test一气呵成,然后就拿到数从Counter对每个单词word_list.

>>> word_list = ["hello", "wonderful", "good", "flawless", "perfect"]
>>> test = ["abc", "hello", "vbf", "good", "dfdfdf", "good", "good"]
>>> counts = collections.Counter(test)
>>> [counts[w] for w in word_list]
[1, 0, 3, 0, 0]
Run Code Online (Sandbox Code Playgroud)

或使用字典综合:

>>> {w: counts[w] for w in word_list}
{'perfect': 0, 'flawless': 0, 'good': 3, 'wonderful': 0, 'hello': 1}
Run Code Online (Sandbox Code Playgroud)

创建计数器应该是O(n),并且每个查找O(1),给出n个单词的O(n + m)test和m个单词word_list.