如何在Python中提取列表中的重复元组?

时间:2017-01-17 19:04:04

标签: python python-2.7 list duplicates tuples

我正在编写一个程序,我需要找到相同的日期......

我目前将日期存储在不同的日期和月份列表中,然后zip将它们存储到日期列表中......所以日期列表可能如下所示:

[(2,4),(4,18),(10,7)]

我的问题是我需要将重复的元组提取到另一个列表中,而不仅仅用set()左右来消除它们。

如果我的日期列表得到[(2,3),(2,3),(4,8)],我需要将(2,3)添加到新列表中。

或者,我可以将日期列表形成dictionary,然后再将其分成项目,但我会问是否有更简单的方法。有什么建议吗?

3 个答案:

答案 0 :(得分:6)

您可以使用计数器执行此任务:

>>> from collections import Counter
>>> L = [(2,3),(2,3),(4,8)]
>>> [k for k,count in Counter(L).items() if count > 1]
[(2, 3)]

如果您想要 all 所有,而不是每个,那么请使用计数和密钥。

如果您关心原始排序,请执行相同的操作,但使用OrderedCounter代替:

>>> from collections import Counter, OrderedDict
>>> class OrderedCounter(Counter, OrderedDict): 
...     pass

答案 1 :(得分:2)

您可以将collections.Counter列表理解表达式一起使用:

>>> from collections import Counter
>>> my_list = [(2,3),(2,3),(4,8)]

>>> my_counter = Counter(my_list)
>>> [k for k, v in my_counter.items() if v>1]
[(2, 3)]

作为替代方案,您也可以使用set()list.count()来获得所需的结果(注意:此方法效率较低):

>>> my_set = set(my_list)  # To get unique tuples
#            count of each tuple  v
>>> [t for t in my_set if my_list.count(t) > 1]
[(2, 3)]

答案 2 :(得分:1)

您可以使用.count()获取列表中每个值的出现次数,如果值为>1,则将它们添加到列表中:

[date for date in dates if dates.count(date)>1]

然后,您可以使用set()从中移除重复内容,并将其转换为list

new_list=list(set([date for date in dates if dates.count(date)>1]))

输出:

[(2,3)]