Python元素在lis中出现的最大次数

2024-04-19 22:48:40 发布

您现在位置:Python中文网/ 问答频道 /正文

给定下面的列表my_list = [ ['red', 'yellow', 'green'], ['red', 'yellow', 'green'], ['red', 'green', 'red']],我想找到最多出现的元素。我已经实现了一个蛮力方法以及一个新的列表和一个字典来保存每个元素的值,但是效率并不令人满意。哪种方法是实现此搜索的最佳方法?我使用的是python3。在


Tags: 方法元素列表字典mygreenredpython3
3条回答

您可以使用itertools.chain.from_iterable来展开列表,然后使用collections.defaultdict来存储计数,从那里获得max键很容易:

from collections import defaultdict
from operator import itemgetter
from itertools import chain

my_list = [['red', 'yellow', 'green'], ['red', 'yellow', 'green'], ['red', 'green', 'red']]

d = defaultdict(int)
for word in chain.from_iterable(my_list):
    d[word] += 1

print(max(d.items(), key = itemgetter(1))[0])
# red

您可以展开嵌套列表并应用max函数:

my_list = [ ['red', 'yellow', 'green'], ['red', 'yellow', 'green'], ['red', 'green', 'red']]
new_list = [i for x in my_list for i in x]
max_val = max(new_list, key=lambda x:new_list.count(x))

输出:

^{pr2}$
my_list = [ ['red', 'yellow', 'green'], ['red', 'yellow', 'green'], ['red', 'green', 'red']]

new_list = [k for v in my_list for k in v]

from collections import Counter

c = Counter(new_list)

print c.most_common(1)
>>> [('red', 4)]

相关问题 更多 >