-2

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

> rem([4])
[]

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

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

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

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

4

4 回答 4

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]
于 2013-01-26T20:37:33.773 回答
0
def rem(a):
    copy = a[:]
    for value in set(copy):
        copy.remove(value)
    return copy
于 2013-01-26T20:36:30.247 回答
-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]
于 2013-01-26T20:34:03.210 回答
-1
l = [1,2,2,3,4]
for item in set(l):
    l.remove(item)
于 2013-01-26T20:36:41.853 回答