Python3 使用字典替换

标签 python string python-3.x replace

谁能解释一下这里出了什么问题:

def get_complementary_sequence(string):
    dic = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
    for a, b in dic.items():
        string = string.replace(a, b)
    return string

我得到了“T”和“C”的正确结果,但“A”和“C”不会被替换。真的卡住了

字符串看起来像“ACGTACG”。

最佳答案

您首先将所有 A 替换为 T,然后再将所有 T 替换为 A再次(包括您刚刚替换 As 的那些!):

>>> string = 'ACGTACG'
>>> string.replace('A', 'T')
'TCGTTCG'
>>> string.replace('A', 'T').replace('T', 'A')
'ACGAACG'

改用翻译图,提供给 str.translate() :

transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
return string.translate(transmap)

str.translate() 方法需要字典将代码点(整数)映射到替换字符(单个字符或代码点),或者 None(删除来自输入字符串的代码点)。 ord() 函数为我们提供给定“发件人”字母的代码点。

这会在翻译映射中逐一查找 C 代码中的 string 中的字符,而不是替换所有 A 后跟所有 Ts.

str.translate() 的额外优势是比一系列 str.replace() 调用快很多

演示:

>>> string = 'ACGTACG'
>>> transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
>>> string.translate(transmap)
'TGCATGC'

关于Python3 使用字典替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723493/

相关文章:

python - 内部函数未形成闭包

python-3.x - 如何在中间件中使用 `fastapi_another_jwt_auth` 而不是通过 FastAPI 中的依赖注入(inject)?

java - 字符串数组到十六进制数组 (Java)

python - 切断空白

python - 无法通过子进程调用从 The Silver Searcher 获取输出

Python游戏总是崩溃或卡住| pygame

java - 为什么 Delphi 中的字符串连接比 Java 中更快?

python - 设置 Python Pub/Sub 异步拉取订阅者线程数

javascript - 带有 JSON 数据的 D3 线,未渲染

python - 默认情况下使用 QTabWidget 防止使用 Ctrl+Tab 进行选项卡循环