将 Counter 中的值分配给列表

Wil*_*iam 0 python counter list

假设我有以下列表:

l1 = ['Hello', 'world', 'world']
l2 = ['Hello', 'world', 'world', 'apple']
Run Code Online (Sandbox Code Playgroud)

因为l1我将不同的元素计算为:

Counter(l1)
Run Code Online (Sandbox Code Playgroud)

这给出了:

Counter({'Hello': 1, 'world': 2})
Run Code Online (Sandbox Code Playgroud)

现在我想通过l2并将上面的值分配给它,以便我得到:

[1,2,2,0]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,apple我们分配了 0,因为计数器中没有它的值。我想知道我该怎么做?

pyt*_*ser 5

您可以像这样使用列表理解。

from collections import Counter

l1 = ['Hello', 'world', 'world']
l2 = ['Hello', 'world', 'world', 'apple']

c1 = Counter(l1)

res = [c1[i] for i in l2]
print(res)
Run Code Online (Sandbox Code Playgroud)

输出

[1, 2, 2, 0]
Run Code Online (Sandbox Code Playgroud)

旧解决方案(在 user2357112 评论之前支持 Monica)

res = [c1.get(i, 0) for i in l2]
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,使用 `get` 毫无意义 - `Counter` 索引已经像这样工作了。 (2认同)