返回包含Python中每个重复值的列表?

时间:2013-01-26 20:25:50

标签: python list duplicates

编写一个方法rem(),该方法将包含可能重复值的列表作为输入 并返回列表的副本,其中删除了每个重复值的一个副本。

> rem([4])
[]

> rem([4, 4])
[4]

> rem([4, 1, 3, 2])
[]

> rem([2, 4, 2, 4, 4])
[2, 4, 4]

我该怎么做呢?我是否制作了包含重复项的新列表?

4 个答案:

答案 0 :(得分:1)

collections.Counter是一个好主意,试试这个:

import collections
def rem(l):
    newlist = []
    for k, v in collections.Counter(l).iteritems():
        newlist += [k] * (v - 1)
    return newlist

print rem([4])
print rem([4, 4])
print rem([4, 1, 3, 2])
print rem([2, 4, 2, 4, 4])
[]
[4]
[]
[2, 4, 4]

答案 1 :(得分:0)

def rem(a):
    copy = a[:]
    for value in set(copy):
        copy.remove(value)
    return copy

答案 2 :(得分:-1)

您可以使用collections.Counter

import collections
def rem(a):
   new_list = []
   for key, count in collections.Counter(a).iteritems():
      if count > 1:
         new_list.extend([key] * (count-1))
   return new_list

举例:

>>> rem([4])
[]
>>> rem([4, 4]) 
[4]
>>> rem([4, 1, 3, 2])
[]
>>> rem([2, 4, 2, 4, 4])
[2, 4, 4]

答案 3 :(得分:-1)

l = [1,2,2,3,4]
for item in set(l):
    l.remove(item)