为了账号安全,请及时绑定邮箱和手机立即绑定

查找并替换Array中的重复项,但将每个nth实例替换为不同的字符串

查找并替换Array中的重复项,但将每个nth实例替换为不同的字符串

小唯快跑啊 2021-03-23 13:09:27
我下面有一个数组,其中包含重复的字符串。我想查找并替换那些字符串,但是每次匹配时,我都想更改替换字符串的值。让我示范一下。此样本数组:SampleArray = ['champ', 'king', 'king', 'mak', 'mak', 'mak']应该更改为:SampleArray = ['champ', 'king1', 'king2', 'mak1', 'mak2', 'mak3']如何做到这一点?我已经走了三天了,没有运气。提前致谢。My Failed Code:import os, collections, reSampleArray = ['champ', 'king', 'king', 'mak', 'mak', 'mak']dupes = [x for x, y in collections.Counter(SampleArray).items() if y > 1]length = len(dupes)count = 0while count < length:    j = 0    instances = SampleArray.count(dupes[count])    while j < instances:        re.sub(dupes[count],  dupes[count] + j, SampleArray, j)        j += 1    count += 1print SampleArray    print ''; os.system('pause')
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

我会使用collections.Counter:


from collections import Counter


numbers = { 

    word: iter([""] if count == 1 else xrange(1, count + 1)) 

    for word, count in Counter(sample).items()

}


result = [

    word + str(next(numbers[word])) 

    for word in sample

]

这不需要以任何方式对列表进行排序或分组。

此解决方案使用迭代器生成序列号:

  • 首先,我们计算每个单词在列表(Counter(sample))中出现的次数。

  • 然后我们创建一个字典numbers,其中每个单词都包含其“编号”迭代器iter(...)。如果单词仅出现一次count==1,则此迭代器将返回(“产生”)一个空字符串,否则它将产生从1到count范围内的连续数字[""] if count == 1 else xrange(1, count + 1)

  • 最后,我们再次遍历该列表,并针对每个单词从其自己的编号迭代器中选择下一个值next(numbers[word])。由于迭代器返回数字,因此我们必须将其转换为字符串str(...)


查看完整回答
反对 回复 2021-03-30
?
月关宝盒

TA贡献1772条经验 获得超5个赞

groupby 是对重复项进行分组的便捷方法:


>>> from itertools import groupby

>>> FinalArray = []

>>> for k, g in groupby(SampleArray):

    # g is an iterator, so get a list of it for further handling

    items = list(g)

    # If only one item, add it unchanged

    if len(items) == 1:

        FinalArray.append(k)

    # Else add index at the end

    else:

        FinalArray.extend([j + str(i) for i, j in enumerate(items, 1)])



>>> FinalArray

['champ', 'king1', 'king2', 'mak1', 'mak2', 'mak3']


查看完整回答
反对 回复 2021-03-30
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信