【问题标题】:using for loop to replace bad nucleotides from DNA sequence使用 for 循环替换 DNA 序列中的坏核苷酸
【发布时间】:2021-12-28 19:47:13
【问题描述】:

我有一个序列列表(为简单起见,如下所示)

seqList=["ACCTGCCSSSTTTCCT","ACCTGCCFFFTTTCCT"]

我想使用 for 循环将除 ["A","C","G","T"] 之外的每个核苷酸实例替换为 "N"

到目前为止我的代码

seqList=["ACCTGCCSSSTTTCCT","ACCTGCCFFFTTTCCT"]
for x in range(len(seqList)):
    for i in range(len(seqList[x])):
        if seqList[x][i] not in ["A","C","G","T"]:
            seqList[x][i].replace(seqList[x][i],"N")
            print(seqList)

问题是,核苷酸没有被替换,原始序列没有任何变化 我不知道原因!!!

【问题讨论】:

  • import re seqList = [re.sub('[^AGTC]', 'N', item) for item in seqList]
  • 像魅力一样工作,谢谢@ChrisCharley

标签: python for-loop replace dna-sequence


【解决方案1】:

python 中的字符串是不可变的。 你可以让ot像这样工作

seqList=  ["ACCTGCCSSSTTTCCT","ACCTGCCFFFTTTCCT"]
for x in range(len(seqList)):
    stringl=list(seqList[x])
    for i in range(len(seqList[x])):
        if seqList[x][i] not in ["A","C","G","T"]:
            stringl[i]="N"
    seqList[x]="".join(stringl)

【讨论】:

  • 成功了,谢谢。 .m 部分可能是一个错字
  • 是的,我是用手机写的。
【解决方案2】:

不循环所有字母的方法将替换所有不是ACGT的字母

def replace_bad(seq):
    unique = [
        letter
        for letter in set(seq)
        if letter not in "ACGT"
    ]

    for each in unique:
        seq = seq.replace(each, "N")

    return seq


if __name__ == '__main__':
    for seq in seqList:
        print(replace_bad(seq))

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多