如何找到列表中出现次数最多的两个字符串?

How to find the two strings that occurs most in a list?

我正在尝试获取数组中出现频率最高的两个元素的数量。例如列表['aa','bb','cc','dd','bb','bb','cc','ff']中出现次数最多的应该是3(数组中出现的次数'bb'),次要出现的次数是2( 'cc' 出现在数组中的次数)。

我试过这个:

max = 0
snd_max = 0
for i in x:
 aux=x.count(i)
 if aux > max
   snd_max=max
   max=aux

print(max, snd_max)

但是我在想是否有更简单的方法?

您可以使用 collections.Counter:

from collections import Counter
x = ['aa','bb','cc','dd','bb','bb','cc','ff']
counter = Counter(x)
print(counter.most_common(2))
[('bb', 3), ('cc', 2)]

试试这个:

l = ['aa','bb','cc','dd','bb','bb','cc','ff']
b = list(dict.fromkeys(l))
a = [(l.count(x), x) for x in b]
a.sort(reverse=True)
a = a[:2]
print(a)

你可以使用 pandas value_counts()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html

将列表放入数据框中,然后使用值计数。

这将为您提供一个包含每个元素及其出现次数的数据框,按最常见的排在最前面。

我用的是max(),很简单

lst = ['aa','bb','cc','dd','bb','bb','cc','ff']
print(max(set(lst), key=lst.count))