我有一个整数列表:
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]