Python 字符串多索引替换而不影响插入顺序?

Python 字符串多索引替换而不影响插入顺序?,python,Python,假设我有一个字符串值str=xxx。现在我想通过多索引替换它,比如{(1,3):'rep1',(4,7):'rep2',(8,9):'rep3'},而不影响索引顺序。我怎么做 伪代码(在Python 2.7中): 使用slice修改项目,可以找到关于slice和赋值的更有力的解释切片(*k)从替换的关键点创建切片对象。例如,slice(*(1,3))给出了一个slice(1,3)的切片,当用作索引时,该切片相当于lst[1:3],当调用切片上的赋值时,用相应的值替换相应的元素: # Here s

假设我有一个字符串值
str=xxx
。现在我想通过多索引替换它,比如
{(1,3):'rep1',(4,7):'rep2',(8,9):'rep3'}
,而不影响索引顺序。我怎么做

伪代码(在Python 2.7中):

使用slice修改项目,可以找到关于slice和赋值的更有力的解释<代码>切片(*k)从替换的关键点创建切片对象。例如,
slice(*(1,3))
给出了一个
slice(1,3)
的切片,当用作索引时,该切片相当于
lst[1:3]
,当调用切片上的赋值时,用相应的值替换相应的元素:

# Here sort the index in reverse order so as to avoid tracking the index change due to the 
# difference of the sizes between the index and replacement
for k, v in sorted(replacement.items(), reverse=True):
    lst[slice(*k)] = v

''.join(lst)
# 'a123d+h&j'
使用slice修改项目,可以找到关于slice和赋值的更有力的解释<代码>切片(*k)从替换的关键点创建切片对象。例如,
slice(*(1,3))
给出了一个
slice(1,3)
的切片,当用作索引时,该切片相当于
lst[1:3]
,当调用切片上的赋值时,用相应的值替换相应的元素:

# Here sort the index in reverse order so as to avoid tracking the index change due to the 
# difference of the sizes between the index and replacement
for k, v in sorted(replacement.items(), reverse=True):
    lst[slice(*k)] = v

''.join(lst)
# 'a123d+h&j'


编写一个执行拼接操作并调整“未来”索引以匹配的循环?你在实现这个算法时有困难吗?你需要什么?按Psidom说的去做。@BoundaryPosition是的,我想要一个实现。实际上,我以一种不明智的方式实现了它(我想是的:()。我想知道是否有一种智能快速的方法可以做到这一点。非常感谢!如果您已经有了一个实现,您应该向我们展示它并征求改进建议。这样做的地方是。@BoundaryPosition为我的错误问题道歉,我下次会注意到。感谢您的提醒!编写一个执行spl的循环ice操作并调整“未来”索引以匹配?您在实现此算法方面有困难吗?您需要什么?OOOOR按照Psidom的要求执行。@边界强制是的,我需要一个实现。实际上,我以一种不明智的方式实现了它(我认为是这样:()。我想知道是否有一种智能快速的方法可以做到这一点。非常感谢!如果您已经有了一个实现,您应该向我们展示它并征求改进建议。这样做的地方是。@BoundaryPosition为我的错误问题道歉,我下次会注意到的。谢谢您的提醒!@BoundaryPosition谢谢评论!鉴于这是一种黑魔法,我建议对
lst[slice(*k)]=v
有效地调整了替换列表的其余部分。我本以为我第一眼就理解了你的答案,但玩了一会儿,我一点也不含糊。当然不能代表OP说话。@Psidom哦!做得很好,非常感谢!但是你能像我说的那样简单地解释一下吗:)@Psidom是的,很抱歉我的问题不清楚。无论如何,这是一个很好的解决方案!@Psidom:Blimey!好吧,所以我提出这个问题是对的,哈。不是黑魔法,而是纯粹的机会。已经:如果这个答案强调故意的反向排序,并提醒OP这会消除问题,那么它就完美了:) Thanks@BoundaryImposition谢谢你的评论!鉴于这是一种黑魔法,我建议对
lst[slice(*k)]=v
如何有效地调整替换列表的其余部分进行更有力的解释。我原以为我一眼就明白你的答案,但我只是玩弄了一下,一点也不含糊。当然不能代表OP说话。@Psidom哦!非常好的工作,非常感谢!但你能简单地解释一下吗?我说:)@Psidom是的,很抱歉我的问题不清楚。无论如何,这是一个很好的解决方案@天哪!好吧,所以我质疑它是对的,哈。不是黑魔法而是纯粹的机会。已经:如果这个答案强调了故意的反向排序,并提醒OP这会消除问题,那么它是完美的:)谢谢
# Here sort the index in reverse order so as to avoid tracking the index change due to the 
# difference of the sizes between the index and replacement
for k, v in sorted(replacement.items(), reverse=True):
    lst[slice(*k)] = v

''.join(lst)
# 'a123d+h&j'