Python>将字符串的变量传递给方法

时间:2018-01-24 15:49:37

标签: python string methods replace indices

我希望将一个字符列表(包括转义字符)替换为另一个字符。

例如:

l=['\n','<br>','while:','<while>','for:','<for>']

s='line1\nline2'

s.replace(l[0],[l[1])

但是通过该方法传递列表索引不会产生任何影响。

我也尝试过使用

s=l[1].join(s.split(l[0]))

如何在不在函数中每次表示对的情况下用另一个字符替换字符列表?

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,代码的问题在于您假设replace就地工作。它没有,你必须将它返回的值赋给变量。

但是,有一种更好的方法可以使用词典。看看:

d = {'\n': '<br>', 'while:': '<while>', 'for:': '<for>'}

s = 'line1\nline2\nwhile: nothing and for: something\n\nnothing special'

for k, v in d.items():
  s = s.replace(k, v)
print(s)  # line1<br>line2<br><while> nothing and <for> something<br><br>nothing special

在这种情况下使用词典的优势在于,您可以非常直接地 替换。如果你可以避免使用索引,那么你不想做它。

最后,如果您想知道如何将列表转换为词典,可以使用以下内容:

d = {k: v for k, v in zip(l[::2], l[1::2])}

即使您的列表中有奇数个元素,也不会中断。

答案 1 :(得分:0)

l=['\n','<br>','while:','<while>','for:','<for>']

s='line1\nline2'

for i in range(0, len(l), 2):
    s = s.replace(l[i], l[i+1])

您只需遍历包含所需对的列表,每次踩超过2个值。然后将替换的结果分配给变量本身(replace不进行内联替换,因为字符串在Python中是不可变的)