如何使用python复制字符串中的字符(就地)?

如何使用python复制字符串中的字符(就地)?,python,string,Python,String,如果这个问题用词不当,我深表歉意;我在下面提供了一个输入和期望的输出来说明我想要产生的效果 inpt='aabbaa' 重复_范围=[2,4] 某些函数(输入,重复范围) >>>>“AAABBAA” 基本上,我想复制在我的inpt字符串中找到的bb,这样复制会在原始出现之后立即发生。您可以从范围列表中构建一个切片,然后通过切片初始字符串并添加要复制的子字符串来构建一个新字符串 inpt = 'aabbaa' duplicate_range = [2,4] 我认为你需要: inpt = 'a

如果这个问题用词不当,我深表歉意;我在下面提供了一个输入和期望的输出来说明我想要产生的效果

inpt='aabbaa'
重复_范围=[2,4]
某些函数(输入,重复范围)
>>>>“AAABBAA”

基本上,我想复制在我的
inpt
字符串中找到的
bb
,这样复制会在原始出现之后立即发生。

您可以从范围列表中构建一个
切片
,然后通过切片初始字符串并添加要复制的子字符串来构建一个新字符串

inpt = 'aabbaa'
duplicate_range = [2,4]

我认为你需要:

inpt = 'aabbaa'
duplicate_range = [2,4]

def some_func(x, rng):
  substr = x[rng[0]:rng[1]]
  x = x[:rng[0]]+substr*2+x[rng[1]:]
  return x

print(some_func(inpt, duplicate_range))

我能想到的一个简单而优雅的方式是:

def some_func(inpt,a,b):
     return inpt[:a] + inpt[a:b]*2 + inpt[b:]

如果要将其作为单独的值接受:

def duplicate_chars(原始,开始=0,结束=-1):
返回原件[:开始]+原件[开始:结束]*2+原件[结束:]
打印(重复字符(“aabbaa”,2,4))#“aabbaa”

如果希望只提供一个额外参数而不是两个,也可以将输入更改为切片:

def重复字符(原始,边界):
返回原始[:bounds.start]+原始[bounds]*2+原始[bounds.stop:]
打印(重复字符(“aabbaa”,切片(2,4))#“aabbaa”

您可以执行以下操作:

def duplicate_part(mystr, duplicate_range):
    start, end = duplicate_range
    part = mystr[start:end] * 2
    new_str = mystr[:start] + part + mystr[end:]
    return new_str

mystr = 'aabbaa'
duplicate_range = [2,4]

duplicate_part(mystr, duplicate_range)
# 'aabbbbaa'
inpt='aabbaa'
重复_范围=[2,4]
定义某些功能(输入,复制范围):
开始=重复的\u范围[0]
结束=重复的_范围[1]
返回输入[:开始]+2*输入[开始:结束]+输入[结束:]
打印(某些功能(输入、复制范围))
>>>“AAABBAA”

您可以这样做:

def duplicate_part(mystr, duplicate_range):
    start, end = duplicate_range
    part = mystr[start:end] * 2
    new_str = mystr[:start] + part + mystr[end:]
    return new_str

mystr = 'aabbaa'
duplicate_range = [2,4]

duplicate_part(mystr, duplicate_range)
# 'aabbbbaa'
使用str.replace() 单线解决方案:
inpt='aabbaa'
d_r=[2,4]#重复的_范围(以节省空间)
inpt=inpt[:dur[0]]+inpt[dur[0]:dur[1]]。替换(inpt[dur[0]:dur[1]],inpt[dur[0]:dur[1]]*2)+inpt[dur[1]:]
打印(输入)
这将产生:

'aabbbbaa'

在函数中使用它:
def一些函数(输入、输出):
返回inpt[:dur[0]]+inpt[dur[0]:dur[1]]。替换(inpt[dur[0]:dur[1]],inpt[dur[0]:dur[1]]*2)+inpt[dur[1]:]
打印(某些功能(输入、输出))
这将产生:


'aabbbbaa'

Python字符串是不可变的,因此
就地
将不可能。如果输入字符串是
'abcdef'
您希望输出是
'abcdcddef'
还是
'abccddef'
?@SimonCrane伟大的问题-给定相同的重复元素范围
[2:4]
,与子字符串
'cd'
相对应,我希望输出
'abcdcddef'
我将第二个事件大写,只是为了引起注意(不是因为我希望在实际输出中将其大写)。您尝试了什么,为什么不起作用?我希望X不是一个好问题,即使您提供输入和输出:o)