如何找到列表中出现次数最多的两个字符串?
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))
我正在尝试获取数组中出现频率最高的两个元素的数量。例如列表['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))