我正在编写一个程序,我需要找到相同的日期......
我目前将日期存储在不同的日期和月份列表中,然后zip
将它们存储到日期列表中......所以日期列表可能如下所示:
[(2,4),(4,18),(10,7)]
我的问题是我需要将重复的元组提取到另一个列表中,而不仅仅用set()
左右来消除它们。
如果我的日期列表得到[(2,3),(2,3),(4,8)]
,我需要将(2,3)
添加到新列表中。
或者,我可以将日期列表形成dictionary
,然后再将其分成项目,但我会问是否有更简单的方法。有什么建议吗?
答案 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)]