给定这样的列表:
mylist = ["name", "state", "name", "city", "name", "zip", "zip"]
我想通过附加一个数字来重命名重复项以获得以下结果:
mylist = ["name1", "state", "name2", "city", "name3", "zip1", "zip2"]
我不想更改原始列表的顺序。建议的解决方案 related Stack Overflow question对列表进行排序,我不想这样做。
最佳答案
我使用 map
和 lambda
的解决方案:
print map(lambda x: x[1] + str(mylist[:x[0]].count(x[1]) + 1) if mylist.count(x[1]) > 1 else x[1], enumerate(mylist))
更传统的形式
newlist = []
for i, v in enumerate(mylist):
totalcount = mylist.count(v)
count = mylist[:i].count(v)
newlist.append(v + str(count + 1) if totalcount > 1 else v)
最后一个
[v + str(mylist[:i].count(v) + 1) if mylist.count(v) > 1 else v for i, v in enumerate(mylist)]
关于Python:用渐进式数字重命名列表中的重复项而不对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650474/