如何检查列表列表中特定索引中最常见的值是什么



我有一个整数列表:

ls = [[1,2,3],[2,2,3],[1,1,3]]

我想最终得到一个具有len(ls[0])元素的列表,每个元素都是该索引中最多的元素。在此示例中,结果是[1 (appears in first&last), 2 (appears in first&second), 3 (appears in all)]

我尝试使用循环,并希望像all一样内置(最多?)

ls = [[1,2,3],[2,2,3],[1,1,3]]
ls2=[]
ls2 =[item for sub in ls for item in sub]
ls2
Out[40]: [1, 2, 3, 2, 2, 3, 1, 1, 3]
ls3=[]
for item in len(ls):...

这样做的方法是什么?

转置列表,应用计数器。

>>> from collections import Counter
>>> ls = [[1,2,3],[2,2,3],[1,1,3]]
>>> counts = [Counter(x) for x in zip(*ls)]
>>> [c.most_common(1)[0][0] for c in counts]
[1, 2, 3]

,如果两个数字共享同一索引的最高事件,则将选择一个任意号码。

我的(替代解决方案)2美分:

>>> ls = [[1, 2, 3], [2, 2, 3], [1, 1, 3]]
>>> l_mc = [max(x, key=x.count) for x in zip(*ls)]
>>> l_mc
[1, 2, 3]

这是另一种方法:

from collections import Counter
from operator import itemgetter
ls = [[1, 2, 3], [2, 2, 3], [1, 1, 3]]
print([max(x.items(), key = itemgetter(1))[0] for x in map(Counter, zip(*ls))])
# [1, 2, 3]

相关内容

最新更新