python - 附加一个数字以重复列表中的值 - 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)
解决方案
您可以使用列表推导:
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']
推荐阅读
- c# - 如何抑制可能的空引用警告
- java - 画布不显示形状
- node.js - 如何使用 Swagger Open API 3.0 上传 csv 文件?
- .net - vb.net 使用插值模式减小图像文件大小不起作用
- python-3.x - 如果输入格式错误,则返回无效的函数
- c# - 使用 PrivateAssets 将 Nuget 依赖项嵌入另一个 nuget
- python - 使用 Python 创建数据集的可编辑副本,同时保持原始数据不变
- python - 使用 Python 3.7.4 版本但仍然出现语法错误
- java - 在 Vaadin 日期选择器中格式化日期
- twilio - 将复杂逻辑添加到 Twilio Whatsapp 机器人