替换列表中的重复项,同时保留第一个重复项

2024-09-26 18:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但我正在寻找一些更简单或更好的方法。你知道吗


Tags: 方法字符串in列表fornlcounterout
3条回答

尝试以下更简单的功能:

def fill_blank(l):
    filled = []
    last = l[0]
    for i in l:
        if i != last:
            last = i
        filled.append(last)
    return filled

按如下方式使用:

>>> lst = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4]
>>> out = fill_blank(lst)
>>> print(out)
[1, '', '', 2, '', '', '', 3, '', '', '', '', 4, '', '', '', '', '', '', '', '']

使用简单的迭代

例如:

lst = [1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4]
dup_check = set()
result = []
for i in lst:
    if i not in dup_check:
        result.append(i)
        dup_check.add(i)
    else:
        result.append("")
print(result)

输出:

[1, '', '', 2, '', '', '', 3, '', '', '', '', 4, '', '', '', '', '', '', '', '']

使用^{},非常适合连续分组重复的值。你知道吗

from itertools import groupby
[v for k, g in groupby(lst) for v in [k] + [""] * (len(list(g))-1)]
# [1, '', '', 2, '', '', '', 3, '', '', '', '', 4, '', '', '', '', '', '', '', '']

如果列表值不连续,可以先对其排序。你知道吗

相关问题 更多 >

    热门问题