为列表中的重复值追加一个数字

2024-10-02 02:39:32 发布

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

   devices = [
    'SWTEST1-3AA-02',
    'SWTEST1-3AA-02',
    'SWTEST1-2CA-01',
    'SWTEST1-2CA-01',
    'SWTEST1-2AA-02',
    'SWTEST1-2AA-02',
    'SWTEST1-2AA-02'
  ]

我正在寻找的输出如下

[
'SWTEST1-3AA-02',
'SWTEST1-3AA-02-2',
'SWTEST1-2CA-01',
'SWTEST1-2CA-01-2',
'SWTEST1-2AA-02',
'SWTEST1-2AA-02-2',
'SWTEST1-2AA-02-3'
]

我尝试了一个for循环和一个计数器,但我没有得到我想要的结果,任何帮助都将不胜感激

对于我尝试的循环:

counter = 1
out = []
for e in devices:
    out.append(f"{e}-{counter}")
    counter += 1
print(out)
out = []

d = {}

for i in devices:
    counter = 1
    d.setdefault(i, -1)
    d[i] += 1

    if d[i] >= 1:
        out.append('{}-{}'.format(i, d[i]))
        counter += 1
    else:
        out.append(i)

print(out)

Tags: informatforifcounter计数器outelse
3条回答

如果您不关心保留列表的原始顺序,那么类似的方法会起作用(而且很好,很简单,在线性时间内工作)

counter = Counter(devices)
result = []
for value, count in counter.items():
    result.append(value)
    for i in range(2, count+1): 
        result.append("{}-{}".format(value, i))

另一个解决方案:

devices = [
    "SWTEST1-3AA-02",
    "SWTEST1-3AA-02",
    "SWTEST1-2CA-01",
    "SWTEST1-2CA-01",
    "SWTEST1-2AA-02",
    "SWTEST1-2AA-02",
    "SWTEST1-2AA-02",
]

out, cnt = [], {}
for d in devices:
    if d not in cnt:
        cnt[d] = 1
    else:
        cnt[d] += 1
        d = d + "-{}".format(cnt[d])
    out.append(d)

print(out)

印刷品:

['SWTEST1-3AA-02', 
 'SWTEST1-3AA-02-2', 
 'SWTEST1-2CA-01', 
 'SWTEST1-2CA-01-2', 
 'SWTEST1-2AA-02', 
 'SWTEST1-2AA-02-2', 
 'SWTEST1-2AA-02-3']

您可以使用列表:

devices = ['SWTEST1-3AA-02', 'SWTEST1-3AA-02', 'SWTEST1-2CA-01', 'SWTEST1-2CA-01', 'SWTEST1-2AA-02', 'SWTEST1-2AA-02', 'SWTEST1-2AA-02']
r = [a if not (s:=sum(j == a for j in devices[:i])) else f'{a}-{s+1}'
    for i, a in enumerate(devices)]

输出:

['SWTEST1-3AA-02', 
 'SWTEST1-3AA-02-2', 
 'SWTEST1-2CA-01', 
 'SWTEST1-2CA-01-2', 
 'SWTEST1-2AA-02', 
 'SWTEST1-2AA-02-2', 
 'SWTEST1-2AA-02-3']

相关问题 更多 >

    热门问题