如何在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)]