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

时间:2017-12-27 21:47:30

标签: python python-2.7

我有一个整数列表列表:

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):...

这样做的方法是什么?

3 个答案:

答案 0 :(得分:3)

转置您的列表,应用计数器。

>>> 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]

如果两个数字共享相同索引的最高出现次数,则会选择一个任意数字。

答案 1 :(得分:1)

我的(另类解决方案)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]

答案 2 :(得分:0)

这是另一种方式:

console.log("Platform", platform);