Python优雅实现:用列表元素依次替换字符串中的连续问号
Pythonic方式替换字符串中的问号为列表对应元素
问题场景
现有字符串:
s = "I ? am ? a ? string"
另有一个列表,长度与字符串中问号?的数量一致:
l = ['1', '2', '3']
需要将字符串里的每个?依次替换为列表中的对应元素,最终得到:
s_new = 'I 1 am 2 a 3 string'
解法1:字符串format方法(简洁直接)
把原字符串中的?替换为{}占位符,再用format解包列表元素:
s = "I ? am ? a ? string" l = ['1', '2', '3'] s_new = s.replace('?', '{}').format(*l) print(s_new) # 输出: I 1 am 2 a 3 string
该方法适合问号独立出现的场景,代码简洁易读。
解法2:正则re.sub+迭代器(扩展性强)
如果需要精准匹配问号(比如避免误替换连续问号或包含?的复合字符),可以用正则配合迭代器逐个取列表元素:
import re s = "I ? am ? a ? string" l = ['1', '2', '3'] it = iter(l) s_new = re.sub(r'\?', lambda _: next(it), s) print(s_new) # 输出: I 1 am 2 a 3 string
迭代器会保证每次替换都取列表的下一个元素,正则\?精准匹配单个问号,适配更多复杂场景。
内容的提问来源于stack exchange,提问作者njminchin
相关产品推荐
相关产品推荐

