计算lis中重复元组的数量

2022-07-06 11:55:01 发布

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

我想计算列表中重复元组的数量。你知道吗

例如num\u list:

num_list = [(3,14),(2,8),(10,25),(5,17),(3,2),(7,25),(4,30),(8,7),(int(2),8),(1,22)]

我想返回结果:Total duplicates: 1 这是(2, 8)对。你知道吗

到目前为止我所做的不是很有效,所以我想知道是否有更有效的方法来做这件事?你知道吗

count = 0
for a in num_list:
  for b in num_list:

     if a is b:
         continue

     if a[0] == b[0] and a[1] == b[1]:
         count += 1

Tags: 方法in列表for数量ifiscountnumlistinttotal元组duplicatescontinue
3条回答
网友
1楼 ·
num_list = [(3,14),(2,8),(10,25),(5,17),(3,2),(7,25),(4,30),(8,7),(int(2),8),(1,22)]

dupe_count = len(num_list) - len(set(num_list))

print(dupe_count)

如果您关心实际项目多次出现,最有效的方法是使用Counter

from collections import Counter

c = Counter(num_list)

c = {k: v for k, v in c.items() if v > 1}

print(c)

给出出现多次的项及其频率的dict

{(2, 8): 2}
网友
2楼 ·
num_list = [(3, 14), (2, 8), (10, 25), (5, 17), (3, 2), (7, 25), (4, 30), (8, 7), (2, 8), (1, 22)]
mostappear = ()
appeartime = 0
for n in num_list:

    count = num_list.count(n)
    if count > appeartime:
        print(count)
        appeartime = count
        mostappear = n
print(appeartime,mostappear)
网友
3楼 ·

您可以使用set进行查找:

lookup = set()
dupes = []

for i in lst:
    if i in lookup:
        dupes.append(i)
    else:
        lookup.add(i)

print(dupes)
# [(2, 8)]
print(len(dupes))
# 1