如何在Python中按索引同时插入多个子字符串?
按字典规则处理字符串替换/插入的实用方案
嘿,我来帮你搞定这个字符串操作的问题!先把需求捋清楚:你有个长度为8的字符串 a(索引0到7),还有个字典 d,里面每个条目都指定了要在哪个索引范围做替换(或者插入)操作——begin是范围起始索引(包含),end是结束索引,w是要放进去的单词。
核心思路
首先得注意一个坑:如果多个操作的索引范围有重叠,或者处理顺序不对,很容易搞乱索引位置。所以最好先把操作按起始索引从大到小排序,这样处理大索引的操作时,不会影响小索引的位置(毕竟改后面的内容不会动前面的索引)。
代码实现(替换指定索引范围)
我写了个Python函数,直接就能用:
def process_string(original_str, ops_dict): # 把字典里的操作转成列表,按起始索引倒序排 sorted_ops = sorted(ops_dict.values(), key=lambda x: int(x['begin']), reverse=True) result = original_str for op in sorted_ops: start = int(op['begin']) end = int(op['end']) # 切片拼接:开头到start + 替换词 + end之后的部分 result = result[:start] + op['w'] + result[end+1:] return result # 测试一下你的例子 a = 'The dog ' # 这里按你说的长度8、索引0-7来写的 d = { 'w1': {'begin':'0', 'end':'3', 'w':'BIG'}, 'w2': {'begin':'4', 'end':'7', 'w':'BARKED'} } print(process_string(a, d)) # 输出结果是 BIGBARKED
要是你想做的是「插入」不是「替换」呢?
如果是要在指定位置插入单词,不用替换原有内容,那只要改一下切片逻辑就行。比如在begin位置插入:
# 插入到begin位置的版本 def insert_into_string(original_str, ops_dict): sorted_ops = sorted(ops_dict.values(), key=lambda x: int(x['begin']), reverse=True) result = original_str for op in sorted_ops: pos = int(op['begin']) result = result[:pos] + op['w'] + result[pos:] return result
这样就会在指定索引位置插入新单词,原有内容往后挪。
为啥要倒序排序?
举个例子:如果先处理0-3的替换,原字符串长度从8变成了3(BIG是3个字符),那原来的4-7索引就不存在了。但倒序的话,先处理4-7的替换,再处理0-3,就不会有这个问题——因为改后面的内容不会影响前面的索引位置。
内容的提问来源于stack exchange,提问作者lampShadesDrifter
相关产品推荐
相关产品推荐

