我想在我的python列表中删除某些重复项。 我知道有一些方法可以删除所有重复项,但我只想删除连续的重复项,同时保持列表顺序。
例如,我有一个如下列表:
list1 = [a,a,b,b,c,c,f,f,d,d,e,e,f,f,g,g,c,c]
但是,我想删除重复项并保持顺序,但仍然保留2 c和2 f,例如:
wantedList = [a,b,c,f,d,e,f,g,c]
到目前为止,我有这个:
z = 0
j=0
list2=[]
for i in list1:
if i == "c":
z = z+1
if (z==1):
list2.append(i)
if (z==2):
list2.append(i)
else:
pass
elif i == "f":
j = j+1
if (j==1):
list2.append(i)
if (j==2):
list2.append(i)
else:
pass
else:
if i not in list2:
list2.append(i)
然而,这种方法给了我类似的东西:
wantedList = [a,b,c,c,d,e,f,f,g]
因此,不维持秩序。
任何想法将不胜感激!谢谢!
答案 0 :(得分:8)
不完全确定c
和f
是否是特殊情况,或者您是否只想压缩连续重复项。如果是后者,您可以使用itertools.groupby()
:
>>> import itertools
>>> list1
['a', 'a', 'b', 'b', 'c', 'c', 'f', 'f', 'd', 'd', 'e', 'e', 'f', 'f', 'g', 'g', 'c', 'c']
>>> [k for k, g in itertools.groupby(list1)]
['a', 'b', 'c', 'f', 'd', 'e', 'f', 'g', 'c']
答案 1 :(得分:3)
要从列表中删除连续重复项,可以使用以下生成器函数:
def remove_consecutive_duplicates(a):
last = None
for x in a:
if x != last:
yield x
last = x
根据您的数据,这会给出:
>>> list1 = ['a','a','b','b','c','c','f','f','d','d','e','e','f','f','g','g','c','c']
>>> list(remove_consecutive_duplicates(list1))
['a', 'b', 'c', 'f', 'd', 'e', 'f', 'g', 'c']
答案 2 :(得分:0)
如果您想在删除重复项时忽略某些项目......
list2 = []
for item in list1:
if item not in list2 or item in ('c','f'):
list2.append(item)
编辑:请注意,这不会删除连续的项目
答案 3 :(得分:0)
EDIT 没关系,我读错了你的问题。我以为你只想保留一定数量的双打。
我会推荐这样的东西。它允许一般形式保持一定的双倍。
list1 = ['a','a','b','b','c','c','f','f','d','d','e','e','f','f','g','g','c','c']
doubleslist = ['c', 'f']
def remove_duplicate(firstlist, doubles):
newlist = []
for x in firstlist:
if x not in newlist:
newlist.append(x)
elif x in doubles:
newlist.append(x)
doubles.remove(x)
return newlist
print remove_duplicate(list1, doubleslist)
答案 4 :(得分:0)
简单的解决方案是将此元素与下一个或上一个元素进行比较
a=1
b=2
c=3
d=4
e=5
f=6
g=7
list1 = [a,a,b,b,c,c,f,f,d,d,e,e,f,f,g,g,c,c]
output_list=[list1[0]]
for ctr in range(1, len(list1)):
if list1[ctr] != list1[ctr-1]:
output_list.append(list1[ctr])
print output_list
答案 5 :(得分:0)
list1 = ['a', 'a', 'b', 'b', 'c', 'c', 'f', 'f', 'd', 'd', 'e', 'e', 'f', 'f', 'g', 'g', 'c', 'c']
wantedList = []
for item in list1:
if len(wantedList) == 0:
wantedList.append(item)
elif len(wantedList) > 0:
if wantedList[-1] != item:
wantedList.append(item)
print(wantedList)