编写一个方法rem()
,将一个可能包含重复值的列表作为输入,并返回列表的副本,其中删除了每个重复值的一个副本。
> rem([4])
[]
> rem([4, 4])
[4]
> rem([4, 1, 3, 2])
[]
> rem([2, 4, 2, 4, 4])
[2, 4, 4]
我该怎么做呢?我是否制作一个包含重复项的新列表?
编写一个方法rem()
,将一个可能包含重复值的列表作为输入,并返回列表的副本,其中删除了每个重复值的一个副本。
> rem([4])
[]
> rem([4, 4])
[4]
> rem([4, 1, 3, 2])
[]
> rem([2, 4, 2, 4, 4])
[2, 4, 4]
我该怎么做呢?我是否制作一个包含重复项的新列表?
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]
def rem(a):
copy = a[:]
for value in set(copy):
copy.remove(value)
return copy
您可以为此使用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]
l = [1,2,2,3,4]
for item in set(l):
l.remove(item)