首页 > 解决方案 > 附加一个数字以重复列表中的值 - 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)

标签: pythonlistduplicates

解决方案


您可以使用列表推导:

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']

推荐阅读