【问题标题】:using .replace to replace more than one character in python [duplicate]使用.replace替换python中的多个字符[重复]
【发布时间】:2017-01-24 20:31:24
【问题描述】:

所以我正在尝试制作一个简单的程序,将一个短语解码为另一个短语。

这是我现在的代码

def mRNA_decode(phrase):
    newphrase = phrase.replace('A','U'),phrase.replace('T','A'),phrase.replace('C','G'),phrase.replace('G','C')
    return newphrase

所以基本上,如果我给出字符串'TATCGTTAATTCGAT',所需的输出将是'AUAGCAAUUAAGCUA'

相反,我得到了('TUTCGTTUUTTCGUT', 'AAACGAAAAAACGAA', 'TATGGTTAATTGGAT', 'TATCCTTAATTCCAT'),这是我输入的短语,但它不是将所有更改都添加到一个短语中,而是打印四种不同的翻译,每个翻译中只有一个字符发生变化。

如何更改代码以便翻译新短语,使其位于具有所需输出的连续字符串上,而不是四个不同的短语?

感谢您的帮助

【问题讨论】:

  • 你需要翻译而不是替换
  • 把 C 换成 G 和 G 换成 C 是错误的。结果将只有 Cs,这不是您所期望的。

标签: python string replace


【解决方案1】:

您可以将str.translate()翻译表格一起使用

s = 'TATCGTTAATTCGAT'

s.translate(str.maketrans("ATCG", "UAGC"))
# 'AUAGCAAUUAAGCUA'

【讨论】:

  • 我学到了新东西,谢谢!
  • @Jean-FrançoisFabre 我在 python 3 上测试过,它可以工作
  • 我的错!我以为它不再起作用了。对不起!这是最有效的方法。
【解决方案2】:

因此,作为参考,请记住顺序很重要。例如,如果您需要交换字符串cat 中的字符ca,则不能将c 替换为a,然后将a 替换为c。否则你会得到这些步骤:

cat --> aat --> cct

【讨论】:

  • 并没有真正回答,但有助于修复此处看到的其他错误答案。
【解决方案3】:

简单

def mRNA_decode(phrase):
    newphrase = phrase.replace('A','U').replace('T','A').replace('C','G').replace('G','C')
    return newphrase

由于str是不可变的,replace总是返回新的字符串,你只需要在新创建的字符串上调用nextreplace方法。

在您的问题中,您对同一字符串进行了四个独立的操作,因此每次调用它们都会产生四个新字符串。您将它们以逗号分隔列出,Python 将其解释为元组声明。

UPD:如 cmets 中所述,您可以调用 phrase.translate(),而不是少数 replace 调用。您可以在其他答案中找到示例。

【讨论】:

  • 虽然使用 str.translate() 会更有效
  • 感谢您的注意。我会更新答案。
  • 我不明白:replace('C','G').replace('G','C') 显然不起作用。它没有任何用处。请修正或删除您的答案。这是错误的。
【解决方案4】:

这是因为你每次都用你的 phrase 变量替换,phrase 的值不会改变,所以你有 4 个不同的输出

一个建议,使用翻译功能代替:

from string import maketrans
intab = "ATCG"
outtab = "UAGC"
trantab = maketrans(intab, outtab)
phrase.translate(trantab)

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多