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

如何在Python中提取列表中的重复元组?,python,python-2.7,list,duplicates,tuples,Python,Python 2.7,List,Duplicates,Tuples,我正在写一个程序,我需要找到相同的日期 我目前将日期存储在不同的日期和月份列表中,然后将它们存储到日期列表中。。。因此,日期列表可能如下所示: [(2,4),(4,18),(10,7)] 我的问题是我需要将重复元组提取到另一个列表中,而不仅仅是用一些set()之类的方法消除它们 如果我的日期列表得到[(2,3)、(2,3)、(4,8)]我需要得到一个新列表 或者,我可以将日期列表形成一个字典,然后再将其分为项目,但我想问是否有更简单的方法。有什么建议吗?您可以与列表理解表达式一起使用,如下所示

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

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

[(2,4),(4,18),(10,7)]
我的问题是我需要将重复元组提取到另一个列表中,而不仅仅是用一些
set()
之类的方法消除它们

如果我的日期列表得到
[(2,3)、(2,3)、(4,8)]
我需要得到一个新列表

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

您可以与列表理解表达式一起使用,如下所示:

>>> 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()
(注意:这种方法效率较低):


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

>>> from collections import Counter
>>> L = [(2,3),(2,3),(4,8)]
>>> [k for k,count in Counter(L).items() if count > 1]
[(2, 3)]
如果需要所有重复,而不是每个重复一次,则使用计数和键

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

>>> from collections import Counter, OrderedDict
>>> class OrderedCounter(Counter, OrderedDict): 
...     pass
您可以使用
.count()
获取列表中每个值的出现次数,如果值为
>1,则将其添加到列表中:

[date for date in dates if dates.count(date)>1]
然后,您可以使用
set()
从中删除重复项,并将其转换为
列表

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

[(2,3)]

我不在乎订单,所以只要柜台就可以了!干杯这段代码以二次时间运行,所以我认为这不是一个理想的解决方案。
[(2,3)]