给定这个字符串 'www__ww_www_'
我需要用以下字符串 '1234'
中的字符替换所有 '_'
字符。结果应该是 'www12ww3www4'
。
TEXT = 'aio__oo_ecc_'
INSERT = '1234'
insert = list(INSERT)
ret = ''
for char in TEXT:
if char == '_':
ret += insert[0]
insert.pop(0)
else:
ret += char
print (ret)
>> aio12oo3ecc4
正确的做法是什么?因为这似乎是效率最低的方法。
最佳答案
您可以使用列表理解遍历 TEXT
,该列表理解使用三元从 INSERT
迭代器或 TEXT
中的当前元素中进行选择>:
>>> TEXT = 'aio__oo_ecc_'
>>> INSERT = '1234'
>>> it = iter(INSERT)
>>> "".join([next(it) if x == "_" else x for x in TEXT])
'aio12oo3ecc4'
好处包括避免 Shlemiel the Painter's Algorithm使用 ret += char
。此外,pop(0)
要求整个列表向前移动,因此它是线性的(最好是反转 INSERT
并使用 pop()
).
作为对此处一些评论的回应,当整个可迭代对象将被当场消耗时,列表理解往往比生成器更快。
关于python - 用给定字符串替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958798/