Python 如何在不使用内置函数的情况下替换字符串列表中的第n个匹配项

Python 如何在不使用内置函数的情况下替换字符串列表中的第n个匹配项,python,Python,我对python有点陌生,我在编写脚本时遇到了问题,该脚本使用四个元素(exstr、Replacefrom、replaceto和n)查找字符并替换第n个匹配项 例如: >>> replaeceit("Mississippi", "s", "l", 2) 'Mislissippi' >>> replaeceit("Mississippi", "s", "l", 0) 'Mississippi' n是2,所以代码将第二个s改为l。。当n=0时,它不做任何事情 老

我对python有点陌生,我在编写脚本时遇到了问题,该脚本使用四个元素(exstr、Replacefrom、replaceto和n)查找字符并替换第n个匹配项

例如:

>>> replaeceit("Mississippi", "s", "l", 2)
'Mislissippi'
>>> replaeceit("Mississippi", "s", "l", 0)
'Mississippi'
n是2,所以代码将第二个s改为l。。当n=0时,它不做任何事情

老实说,我不知道如何实现方程的n这是我的代码到目前为止没有n

def replaceit(str,replacefrom,replaceto):
    new=""
    for letter in str:
        if letter== replacefrom:
            new=new+replaceto
        else: 
            new=new+letter
    return new

这是理解您的问题的第二次尝试:

def replaceit(s, replacefrom, replaceto, n):
  new_s, count = '', 0
  for letter in s:
    if letter == replacefrom:
      count += 1
      if count == n:
        new_s += replaceto
        continue
    new_s += letter
  return new_s
这与您的示例相匹配:

>>> replaceit("Mississippi", "s", "l", 2)
'Mislissippi'
>>> replaceit("Mississippi", "s", "l", 0)
'Mississippi'
如果这不是你想要的,请更好地解释

使用正则表达式也可以实现同样的效果:

def replaceit(s, replacefrom, replaceto, n):
  import re
  if n <= 0:
    return s
  return re.sub('(.*?%s)%s' % (('%s.*?' % replacefrom) * (n-1), replacefrom), r'\1%s' % replaceto, s)
def replaceit(s,replacefrom,replaceto,n):
进口稀土

如果n好的,也许现在我明白你在找什么了:

def replaceit(st, remove, put, pos):
outs = ""
count = 0
for letter in st:
    if letter == remove:
        count += 1
        if count == pos:
            outs += put
        else:
            outs += letter
    else:
        outs += letter
return outs
输出:

In [84]: replaceit("Mississipi", "s", "l", 2)
Out[84]: 'Mislissipi'

当然,您可以检查参数no2和no3是否是len()为1的字符串。

每个人都喜欢生成器表达式

from itertools import count
def replaceit(str, replacefrom, replaceto, n):
    c = count(1)
    return ''.join(replacefrom if l == replaceto and c.next() == n else l for l in str)

你能解释一下你的例子吗?我看不出你是如何从你的问题中得到例子中的结果的。不,它与我的例子不匹配,数字n代表第n个字符,它与密西西比州的第二个s一样重复或存在,所以代码只是更改特定字符的第n个出现。所以你只想替换第n个出现?我已经编辑过,它与您的输出相匹配。希望这是你想要的,但如果是,你解释得很糟糕。