我有一个列表 lst = [1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4 ,4,4]
我期待以下输出:
out = [1,"","",2,"","","",3,"","","","",4,"","","","","","","",""]
我想保留该项目的第一次出现,并将同一项目的所有其他出现替换为空字符串。
我尝试了以下方法。
`def splrep(lst):
from collections import Counter
C = Counter(lst)
flst = [ [k,]*v for k,v in C.items()]
nl = []
for i in flst:
nl1 = []
for j,k in enumerate(i):
nl1.append(j)
nl.append(nl1)
ng = list(zip(flst, nl))
for i,j in ng:
j.pop(0)
for i,j in ng:
for k in j:
i[k] = ''
final = [i for [i,j] in ng]
fin = [i for j in final for i in j]
return fin`
但我正在寻找一些更简单或更好的方法。
最佳答案
使用itertools.groupby
, 非常适合对连续重复的值进行分组。
from itertools import groupby
[v for k, g in groupby(lst) for v in [k] + [""] * (len(list(g))-1)]
# [1, '', '', 2, '', '', '', 3, '', '', '', '', 4, '', '', '', '', '', '', '', '']
如果您的列表值不连续,您可以先对它们进行排序。
关于python - 替换列表中的重复项目,同时保留第一次出现的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54037427/