Python .split列表是可调用的,但索引超出范围?

时间:2014-01-09 02:34:52

标签: python string list indexing

我正在编写一个代码来翻译DNA,我正在寻求帮助。

示例输入看起来像:A C G T G C

我正在寻找输出:[“T”,“G”,“C”,“A”,“C”,“G”]

我也希望while循环的循环次数与输入中的字符数一样多。(用变量替换9)

我非常感谢所有的帮助!

n = 0
i = 0
list_1 = []
text = raw_input("TYPE WITH SPACES BETWEEN LETTERS:")
hi = len(text)
while i < 9 : 
    split_string = text.split(" ")
    if split_string[n] == "A" : 
        list_1.append("T")
    elif split_string[n] == "T" :
        list_1.append("A")
    elif split_string[n] == "C" :
        list_1.append("G")
    elif split_string[n] == "G" :
        list_1.append("C")
    i = i +1
    n = n + 1
print list_1

4 个答案:

答案 0 :(得分:1)

如何一次性使用split()来分解输入:

>>> dnaSeq = raw_input("Enter a space-separated DNA string:").split()
Enter a space-separated DNA string:A C G T G C
>>> dnaSeq
['A', 'C', 'G', 'T', 'G', 'C']

然后使用字典将碱基映射到它们的碱基对以获得互补链:

>>> dnaPair = dict(A="T", T="A", C="G", G="C")
>>> complement = [dnaPair[base] for base in dnaSeq]
>>> complement
['T', 'G', 'C', 'A', 'C', 'G']

答案 1 :(得分:0)

这应该这样做。

translate_dict={'A':'T',
        'T':'A',
        'C':'G',
        'G':'C'}
text=raw_input("TYPE WITH SPACES BETWEEN LETTERS:")
print [translate_dict[item] for item in text.upper().split(' ')]

结果:

TYPE WITH SPACES BETWEEN LETTERS:A T G G C C G T C
['T', 'A', 'C', 'C', 'G', 'G', 'C', 'A', 'G']

答案 2 :(得分:0)

python 3中的单行

text.translate(str.maketrans('ATCG','TAGC')).split(' ')

甚至

raw_input('Type with spaces between  letters:'
).translate(str.maketrans('ATCG','TAGC')).split(' ')

或在Python 2中

from string import maketrans
text.translate(maketrans('ATCG','TAGC')).split(' ')

答案 3 :(得分:0)

倾听每个人的意见,我想我已经解决了。 我没有足够的声誉来投票,但我会! (我也为Uracil及其“转录”编码,而非“翻译”。谢谢!

conv={"A":"T","T":"A","C":"G","G":"C","U":"A"}

outputDNA=""
inputDNA= raw_input("Type the DNA sequence you want transcribed: ")

for letter in inputDNA:
    outputDNA += conv[letter]
print outputDNA