python - 用给定字符串替换字符串中的字符

标签 python string

给定这个字符串 '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/

相关文章:

java - 声明字符串数组的区别

php - 如何替换PHP中固定位置的字符?

Python:Mac 和 Ubuntu 之间的 Unicode 编码不同

python - Python 中的 tar 函数

python - Pandas 获取类别到整数值的映射

javascript - 将大括号内的所有文本提取到字符串数组中

arrays - 转换字符串?

Python:解释器中的 id() 行为

python - 从命令行运行脚本时无法播放pygame.mixer声音

python - 添加反斜杠而不转义