我已经解决了这个问题。我只想做一些深入的解释

时间:2021-02-20 16:04:20

标签: python replace

问题是

onput = '2x**4 - 2x**3 - x**2 + 3x - 4'   #some random 5-term polynomial
factors = [1, -1, 2, -2, 5]
for i in range(len(factors)):
   subtitute = '({})'.format(factors[i])
   onput = onput.replace('x', subtitute)  #replaces 'x'
   print(onput)

显然打印:

>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4

代替:

>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(-1)**4 - 2(-1)**3 - (-1)**2 + 3(-1) - 4
>>> 2(2)**4 - 2(2)**3 - (2)**2 + 3(2) - 4
>>> 2(-2)**4 - 2(-2)**3 - (-2)**2 + 3(-2) - 4
>>> 2(5)**4 - 2(5)**3 - (5)**2 + 3(5) - 4

所以我的解决方案是:

onput = '2x**4 - 2x**3 - x**2 + 3x - 4'
factors = [1, -1, 2, -2, 5]
for i in range(len(factors)):
    subtitute = '({})'.format(factors[i])
    xonput = onput.replace('x', subtitute)
    print(xonput)

成功打印出我想要的结果。但问题是我不太明白为什么使用相同的列表来调用相同的列表会导致这个 bug 将因子列表的第一项保留为每个替换,而不是将它替换为每个列表的每个项目替换。

1 个答案:

答案 0 :(得分:2)

问题在于,在第一个循环中,修改了 onput 以替换所有 x 占位符,因此,在下一次迭代中,没有更多的 x 替换onput

通过使用不同的变量 (xonput),可以避免覆盖模板字符串。