正确顺序的计数列表

List of Counts in the Correct Order

对于列表:

names=['fred', 'fred', 'fred', 'bill', 'bill', 'ted', 'ted', 'ted', 'ted']

我想要return每个名字的计数列表:

desired_list=[3,2,4]

请注意,每个名称的数量与列表中的顺序相同 'names'。

我试过的代码: 输入:

name_count=[names.count(x) for x in set(names)]

输出:

[4, 3, 2]

......但是顺序错了。它应该是 [3,2,4]...与名称列表中名称的顺序相同。

使用collections.Counter

from collections import Counter

names = ['fred', 'fred', 'fred', 'bill', 'bill', 'ted', 'ted', 'ted', 'ted']

print(list(Counter(names).values()))

[3, 2, 4]

使用 itertools 中的 groupby 和列表理解的另一个选项是:

from itertools import groupby
names=['fred', 'fred', 'fred', 'bill', 'bill', 'ted', 'ted', 'ted', 'ted']

res = [len(list(g[1])) for g in groupby(names)]
print(res)

哪个returns:

[3, 2, 4]