如何在Python中替换字符串中的字符,但不使用字符串方法?

如何在Python中替换字符串中的字符,但不使用字符串方法?,python,string,replace,character,Python,String,Replace,Character,我刚开始学习Python,我陷入了这个问题:我有一个DNA序列,我需要返回它的互补序列。例如,如果我有ATTGCA,它应该返回TAACGT。也就是说,将A替换为T,T替换为A,C替换为G,G替换为C。这是一个练习,我不应该使用字符串方法。到目前为止,我尝试过的一切,都以“T”作为回答。似乎它只识别第一个字母,然后停止。我怎么做 我试过: >>> def get_complementary_sequence(dna): for char in dna: i

我刚开始学习Python,我陷入了这个问题:我有一个DNA序列,我需要返回它的互补序列。例如,如果我有
ATTGCA
,它应该返回
TAACGT
。也就是说,将
A
替换为
T
T
替换为
A
C
替换为
G
G
替换为
C
。这是一个练习,我不应该使用字符串方法。到目前为止,我尝试过的一切,都以“T”作为回答。似乎它只识别第一个字母,然后停止。我怎么做

我试过:

>>> def get_complementary_sequence(dna):
    for char in dna:
        if char == 'A':
            return 'T'
        elif char == 'T':
            return 'A'
        elif char == 'C':
            return 'G'
        elif char == 'G':
            return 'C'


>>> get_complementary_sequence('ATTGCA')
'T'
并尝试:

def get_complementary_sequence(dna):
    sequence = ""
    for nucleotide in dna:
        if nucleotide == 'A':
            return sequence + 'T'
        elif nucleotide == 'T':
            return sequence + 'A'
        elif nucleotide == 'C':
            return sequence + 'G'
        elif nucleotide == 'G':
            return sequence + 'C'
        return sequence


>>> get_complementary_sequence('ATTGCA')
'T'

字符串也是一个字符序列,因此可以对其进行迭代:

for char in sequence:

试试字典,这样你就不需要
if
elif

In [45]: dic={'A':'T','T':'A','C':'G','G':'C'}

In [46]: strs="ATTGCA"

In [47]: ''.join(dic[x] for x in strs)
Out[47]: 'TAACGT'
或者使用
map()


以下是Ashwini Chaudhary的优雅解决方案,初学者可能更容易理解:

complements = {'A': 'T',
               'T': 'A',
               'C': 'G',
               'G': 'C'}
dna_sequence = 'ATTGCA'
new_sequence = []
for char in dna_sequence:
    new_sequence.append(complements[char])
# new_sequence is now ['T', 'A', 'A', 'C', 'G', 'T']
result = ''.join(new_sequence) # result in 'TAACGT'

另一种使用字典的方法,完全没有字符串方法:)


这个解决方案很容易理解。希望能有帮助

def get_complement(nucleotide):
    """ (str) ->str
    """

    sequence = ""
    for char in nucleotide:
        if char == "A":
            sequence = sequence + "T"
        if char == "T":
            sequence = sequence + "A"
        if char == "G":
            sequence = sequence + "C"
        if char == "C":
            sequence = sequence + "G"

    return sequence

到目前为止我尝试过的一切
->然后告诉我们您尝试了什么?>>>def get_complemental_sequence(dna):对于dna中的字符:if char='A':return'T'elif char='T':return'A'elif char='C':return'G'elif char='G':return'C'>>获取互补_sequence('ATTGCA')“T'>>>在您的问题中发布此代码。。编辑您的问题。用代码编辑问题
join
是一种“字符串方法”,因此我想知道这是否符合要求。虽然我想有人可能会说,即使是
+
也是一种字符串方法(
\uuuuu add\uuuuu
)。@laurencegon拯救了我,因为他关心的字符串方法是
replace()
。也许吧。他说“我不应该使用字符串方法”而不是“我不应该使用replace()”@AshwiniChaudhary:我会更关心他使用
“ataggtctta”
replace()
会因为对称替换而难以使用…@TimPietzcker我从来不知道这个方法,谢谢你。但我想这只适用于py3k?+1为什么我没有想到:),但您可以将您的解决方案简化为Neat。您可能想使用Python
trans = {'A':'T','T':'A','C':'G','G':'C'}
with open("temp.txt", "w") as outfile:
    for character in mystring:
        outfile.write(trans[character])
with open("temp.txt") as infile:
    result = infile.read()
def get_complement(nucleotide):
    """ (str) ->str
    """

    sequence = ""
    for char in nucleotide:
        if char == "A":
            sequence = sequence + "T"
        if char == "T":
            sequence = sequence + "A"
        if char == "G":
            sequence = sequence + "C"
        if char == "C":
            sequence = sequence + "G"

    return sequence