📜  在 python 中计算列表中的重复项(1)

📅  最后修改于: 2023-12-03 15:23:16.611000             🧑  作者: Mango

在 Python 中计算列表中的重复项

在编写 Python 代码时,我们经常需要处理列表中的重复项。本文将介绍如何计算一个列表中的重复项,并提供几种解决方案。

方案一:使用 Counter

Counter 是 Python 中的一个计数器工具,可以方便地统计一个列表中每个元素出现的次数。

from collections import Counter

lst = [1, 2, 2, 4, 4, 4, 5, 5]
count_dict = Counter(lst)
dups = [item for item, count in count_dict.items() if count > 1]

这个代码片段首先导入了 Counter 工具,然后统计了 lst 中每个元素出现的次数。最后,筛选出出现次数大于 1 的元素就得到了重复项列表。dups 的值就是 [2, 4, 5]。

方案二:使用 set

另一种常用的方法是通过 set 去除重复元素,然后将去重后的列表和原列表的差集计算,即为重复项。

lst = [1, 2, 2, 4, 4, 4, 5, 5]
unique_lst = set(lst)
dups = list(set([x for x in lst if lst.count(x) > 1]))

这个代码片段首先将 lst 转换为 set,得到了去重后的列表 unique_lst。然后,使用列表推导式遍历 lst,统计每个元素在 lst 中出现的次数,将出现次数大于 1 的元素添加到另一个 set 中,最后将这个 set 转换为列表,即为重复项。dups 的值就是 [2, 4, 5]。

方案三:使用 defaultdict

使用 defaultdict 也可以实现计算列表中的重复项。这个方法利用了 Python 中的 defaultdict 类型以及列表的特性。

from collections import defaultdict

lst = [1, 2, 2, 4, 4, 4, 5, 5]
d = defaultdict(list)
for i, x in enumerate(lst):
    d[x].append(i)
dups = [(key, locs) for key, locs in d.items() if len(locs) > 1]

这个代码片段首先导入了 defaultdict 类型,然后遍历 lst,使用 defaultdict 存储每个元素出现的位置。最后,筛选出出现位置大于 1 的元素就得到了重复项列表。dups 的值就是 [(2, [1, 2]), (4, [3, 4, 5]), (5, [6, 7])]。

以上就是三种常用的计算列表中重复项的方法。根据不同的场景,选择合适的方法可以让我们的代码更加简洁高效。