替换Python列表中的重复字符串

Sum*_*mit 3 python string list

我有一个Python列表,并且只有一个元素重复三次。我想用独特的元素代替它们。

my_list = [,...,'future_use',...,'future_use',..'future_use',...]
Run Code Online (Sandbox Code Playgroud)

预期输出:

[,...,'future_use1',...,'future_use2',..'future_use3',...]
Run Code Online (Sandbox Code Playgroud)

我尝试使用列表理解:

count = my_list.count("future_use")
for i in range(1, count+1):
    my_list = [item.replace("future_use","future_use%r" %i,i) for item in my_list]
Run Code Online (Sandbox Code Playgroud)

但是,我没有得到期望的输出,有人可以指出我正确的程序吗?

DSM*_*DSM 5

你可以使用Counterdefaultdict从收藏和count从itertools让这个短一点; 是否更清晰取决于您使用Python的时间。像这样的模式被大量使用,并且值得熟悉。

(此处为python 3.6样式,使用f字符串)

from collections import Counter, defaultdict
import itertools

seq = ["a", "future_use", "b", "b", "future_use", "c", "future_use"]

counts = Counter(seq)
suffix_counter = defaultdict(lambda: itertools.count(1))
seq2 = [elem if counts[elem] == 1 else elem + f'_{next(suffix_counter[elem])}'
        for elem in seq]
Run Code Online (Sandbox Code Playgroud)

给我

>>> seq2
['a', 'future_use_1', 'b_1', 'b_2', 'future_use_2', 'c', 'future_use_3']
Run Code Online (Sandbox Code Playgroud)


Meg*_*Ing 0

尝试这个:

i = 0
for j, item in enumerate(my_list):
    if item == "future_use":
        my_list[j] = "future_use" + str(i)
        i += 1
Run Code Online (Sandbox Code Playgroud)

  • `i` 必须被初始化。 (2认同)