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)
但是,我没有得到期望的输出,有人可以指出我正确的程序吗?
你可以使用Counter
和defaultdict
从收藏和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)
尝试这个:
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)
归档时间: |
|
查看次数: |
101 次 |
最近记录: |