【问题标题】:Python list replacementPython 列表替换
【发布时间】:2011-09-21 09:50:37
【问题描述】:

如何用另一个列表中相同位置的元素替换列表中的每个元素?我认为这样的事情可能会奏效:

list1 = ['a', 'b', 'c', 'd']
list2 = ['a_replaced', 'b_replaced', 'c_replaced']
text = open(textfile, 'r')
 n = 0
for line in  text:
    line = line[0:len(line)-1]
    line.replace(col[n], outcol[n])
    print line
    n + 1 

但它不起作用。我做错了什么?

【问题讨论】:

  • 你在哪里声明 col 和 outcol?他们应该是list1和list2吗?
  • 如果你的意思是增加n,你需要写n += 1。但是我很难弄清楚你想让你的程序做什么。

标签: python list replace


【解决方案1】:

replace 返回新字符串。你需要line = line.replace(col[n], outcol[n])

【讨论】:

    【解决方案2】:

    5 件事:

    • 您引用了coloutcol,我认为它们实际上是list1list2
    • list1list2 大小不同,会崩溃
    • 您没有检查 n 的边界,因此如果您的文本文件超过 4 行,它将崩溃
    • n + 1 这行实际上并没有做任何事情,它应该是n += 1
    • line.replace 不进行内联替换,它返回一个新字符串。

    所以把它改成line = line.replace(...)

    我不知道你想要完成什么。该程序将第 1 行中的a 替换为a_replaced,将第2 行中的b 替换为b_replaced,将第3 行中的c 替换为c_replaced,并将第4 行中的d 替换为d_replaced。。 p>

    replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
    text = open(textfile, 'r')
    n = 0
    for line in  text:
        if n >= len(replacements):
            break
        print line[:-1].replace(replacements[n][0], replacements[n][1])
        n += 1 
    

    但是,如果您尝试在每一行上应用所有替换,方法如下:

    replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
    text = open(textfile, 'r')
    for line in  text:
        line = line[:-1]
        for oldtext, newtext in replacements:
            line = line.replace(oldtext, newtext)
        print line
    

    或上述程序的更短版本:

    replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
    text = open(textfile, 'r').read()
    for oldtext, newtext in replacements:
        text = text.replace(oldtext, newtext)
    print text,
    

    【讨论】:

      【解决方案3】:

      replace 不会更改字符串,它会返回修改后字符串的副本。

      line = line.replace(col[n], outcol[n])
      

      【讨论】:

        【解决方案4】:

        我认为这是您想要实现的目标,尽管从您提供的代码中很难判断:

        list1 = ['a', 'b', 'c', 'd']
        list2 = ['a_replaced', 'b_replaced', 'c_replaced', 'd_replaced']
        text = open(textfile, 'r')
        for line in text:
            for index, old in enumerate(list1):
                line = line.replace(old, list2[index])
            print line
        text.close()
        

        这应该可行。评论澄清

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-29
          • 2019-02-26
          • 2022-11-10
          • 2012-11-11
          • 2016-06-18
          相关资源
          最近更新 更多