将数字添加到列表中的重复字符串

嗨,我有一个值列表

ls = ["a", "a", "b", "b", "b", "b",  "c"]

如果我正确使用了该术语,我希望在重复项中添加一个枚举编号。

基本上我想结束这个:

ls = ["a", "2a", "b", "2b", "3b", "4b",  "c"]

或这个

ls = ["1a", "2a", "1b", "2b", "3b", "4b",  "1c"]

我只希望列表中的每个元素都是唯一的


千万里不及你
浏览 103回答 3
3回答

侃侃尔雅

这可能不是最有效的方法。ls = ["a", "a", "b", "b", "b", "b",  "c"]UniqueValues = set(ls)for x in UniqueValues:    number = 0    for i in range(0,len(ls)):        if ls[i] == x:            number += 1            if number >= 2:                ls[i] += str(number)但我们得到你要找的东西print(ls)['a', 'a2', 'b', 'b2', 'b3', 'b4', 'c']

繁花不似锦

你可以使用Counter和unique方法。from numpy import uniquefrom collections import Counterls = ["a", "a", "b", "b", "b", "b",  "c"]dup = dict(Counter(ls))l_uniq = unique(ls)print([key if i == 0 else key + str(i+1) for key in l_uniq for i in range(dup[key])])出去:['a', 'a2', 'b', 'b2', 'b3', 'b4', 'c']

米琪卡哇伊

所以我们每次都需要检查完整列表,以便如果存在相同的值,我们可以更改指向值。ls = ["a", "a", "b", "b", "b", "b",  "c",'a','a']for index,value in enumerate(ls):  if value in ls[index+1:]:    for new in range(0,200000000):      if not  f'{value}{new}' in ls:        ls[index] = f'{value}{new}'        breakprint(ls)输出:['a0', 'a1', 'b0', 'b1', 'b2', 'b', 'c', 'a2', 'a']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python