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

为列表中的重复值追加一个数字-python,python,list,duplicates,Python,List,Duplicates,我正在寻找的输出如下 devices = [ 'SWTEST1-3AA-02', 'SWTEST1-3AA-02', 'SWTEST1-2CA-01', 'SWTEST1-2CA-01', 'SWTEST1-2AA-02', 'SWTEST1-2AA-02', 'SWTEST1-2AA-02' ] 我尝试了一个for循环和一个计数器,但我没有得到我想要的结果,任何帮助都将不胜感激 对于我尝试的循环: 计数器=1 out=[] 对

我正在寻找的输出如下

   devices = [
    'SWTEST1-3AA-02',
    'SWTEST1-3AA-02',
    'SWTEST1-2CA-01',
    'SWTEST1-2CA-01',
    'SWTEST1-2AA-02',
    'SWTEST1-2AA-02',
    'SWTEST1-2AA-02'
  ]
我尝试了一个for循环和一个计数器,但我没有得到我想要的结果,任何帮助都将不胜感激

对于我尝试的循环:

计数器=1
out=[]
对于e-in设备:
out.append(f“{e}-{counter}”)
计数器+=1
打印(输出)
out=[]
d={}
对于i-in设备:
计数器=1
d、 设置默认值(i,-1)
d[i]+=1
如果d[i]>=1:
append(“{}-{}.”格式(i,d[i]))
计数器+=1
其他:
out.append(i)
打印(输出)

您可以使用列表:

[
'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'
]
输出:

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']
印刷品:

['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']
另一种解决方案:

['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']
印刷品:

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

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


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


这应该满足您的要求:

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))
但是,如果订购很重要,这将不起作用,您可能需要更多的参与。(我的意思是,最终输出将具有分组在一起的重复值,而不是按照它们在原始列表中出现的顺序)

如果要维护订单,您需要以下内容:

from collections import Counter

result = [(t+(f'-{i+1}' if i>0 else '')) for t,count in Counter(devices).items() for i in range(count)]

现在,结果将具有与原始结果相同的值顺序,但附加了重复计数器。

这应该满足您的要求:

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))
但是,如果订购很重要,这将不起作用,您可能需要更多的参与。(我的意思是,最终输出将具有分组在一起的重复值,而不是按照它们在原始列表中出现的顺序)

如果要维护订单,您需要以下内容:

from collections import Counter

result = [(t+(f'-{i+1}' if i>0 else '')) for t,count in Counter(devices).items() for i in range(count)]

现在,结果的值顺序将与原始结果相同,但添加了重复的计数器。

显示您尝试了什么,以及哪些不起作用可能会有所帮助。任何答案都将涉及循环和计数器。请发布您尝试过的内容和出现的问题。欢迎使用堆栈溢出!请拿起,阅读,和,并提供一个。“为我实现此功能”是本网站的主题。你必须做一个诚实的尝试,然后问一个关于你的算法或技术的具体问题。我添加了一些我用过的例子来回答你的问题吗?这可能会有助于显示您尝试了什么,以及哪些不起作用。任何答案都将涉及循环和计数器。请发布您尝试过的内容和出现的问题。欢迎使用堆栈溢出!请拿起,阅读,和,并提供一个。“为我实现此功能”是本网站的主题。你必须做一个诚实的尝试,然后问一个关于你的算法或技术的具体问题。我添加了一些我用过的例子来回答你的问题吗?这是一个类似的代码,我试图写,看起来我做了两个步骤错误,谢谢!这是一个类似的代码,我试图写,看起来我做了两个步骤错误,谢谢!