您如何在二维列表中找到大多数重复项?

时间:2019-10-10 14:54:47

标签: python python-3.x jupyter-notebook 2d

我有一个二维列表,我想通过列表理解来返回最多的重复项。例如,我在

下有一个列表
a = [[10, 15, 17,],[20,21,27],[10,15,17],[21,27,28],[21,27,28],[5,10,15],[15,17,20]]

我希望我的结果是

b = [[10,15,17],[21,27,28]

3 个答案:

答案 0 :(得分:2)

计算重复次数的常见解决方案是collections.Counter

from collections import Counter

a = [[10, 15, 17], [20, 21, 27], [10, 15, 17], [21, 27, 28], [21, 27, 28], [5, 10, 15], [15, 17, 20]]

# count duplicates
counts = Counter(map(tuple, a))

# find the maximum count (the values of counts are the duplicate count)
maximum_count = max(counts.values())

# filter and convert back to list
result = [list(e) for e, count in counts.items() if count == maximum_count]

print(result)

输出

[[10, 15, 17], [21, 27, 28]]

在您的情况下,尤其是因为列表的元素是列表,您需要将它们转换为元组(以使其可散列),然后仅过滤列表并保持元素的最大计数。

答案 1 :(得分:1)

在此处分割一行:

[ a[k] 
  for k in range(len(a)) 
  if  a.count( a[k] ) > 1
  and k == a.index( a[k] ) ]

答案 2 :(得分:0)

执行此操作的最简单方法是查找每个元素的计数并存储最大计数。然后,显示所有具有最大计数的元素(删除重复项)。

以下代码将为您工作:

a = [[10, 15, 17,],[20,21,27],[10,15,17],[21,27,28],[21,27,28],[5,10,15],[15,17,20]]
check=0
for i in a:
    if a.count(i) > check:
         check=a.count(i)    #Check to see maximum count

b=[]
for i in a:
    if a.count(i) == check:   #Choosing elements with maximum count
        if i not in b:        #Eliminating duplicates
            b.append(i)

print(b)

输出:

[[10, 15, 17], [21, 27, 28]]