【问题标题】:Python > passing variables of a string into a methodPython > 将字符串的变量传递给方法
【发布时间】:2018-07-03 17:36:04
【问题描述】:

我正在寻找用另一个替换字符列表(包括转义字符)。

例如:

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

s='line1\nline2'

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

但通过该方法传递列表索引不会产生任何效果。

我也尝试过使用

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

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

【问题讨论】:

  • 确实如此,您只需将结果绑定回变量s = s.replace(l[0],l[1])。话虽如此,你这样做的方式是一个糟糕的方式

标签: python string methods replace indices


【解决方案1】:

正如我在 cmets 中所说,您的代码的问题在于您假设 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

在这种情况下使用字典的好处是您可以非常直接地 替换您想要替换的内容以及 with 替换的内容。如果可以避免,就不要玩索引。

最后,如果您想知道如何将列表转换为 dict,您可以使用以下命令:

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

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

【讨论】:

    【解决方案2】:
    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 中是不可变的)

    【讨论】:

    • 我不会鼓励像这样处理索引,但如果 OP 想要将他的输入放在一个列表中,那么可以。
    • 他可能会收到列表作为输出。而使用ii+1 是一件很难考虑的事情...... 杂耍
    • 这可能值得商榷,但在这种情况下,我还会检查以确保我的列表中包含 偶数 个元素,因为如果没有,则此代码为 fails
    • 对不起这个非常规的例子。输入将来自未确定的列表,但不变的是替换和替换字符将从列表索引传递到方法中。谢谢两位的建议。
    猜你喜欢
    • 2020-10-27
    • 2020-06-16
    • 2016-12-03
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多