python - 替换列表中的重复项目,同时保留第一次出现的项目

标签 python list duplicates

我有一个列表 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/

相关文章:

mysql - 在 SQL 的一对多关系中查找重复项

algorithm - sklearn k最近邻居问题

python - 有没有办法在 Python 中使用 subplot2grid 制作本地标题

python - 模块未找到错误 : No module named 'flask_session'

python - 如何生成随机数列表,使它们的总和等于随机选择的数字

python - 链表和数组

php - 从数组中获取重复的条目(而不是仅仅删除它们)

python - PHP 开发人员如何开始使用 MAMP 和 Python?

python - 无法在一台计算机上使用 pip 安装我在另一台计算机上成功安装的软件包

c# - C#中的多维关联数组