编程newb / python newb,我的工作非常苛刻,所以我找到了很多空闲时间来教我自己如何编码。
我正在处理this rosalind.info问题。
到目前为止,这是我的代码:
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 21 09:01:51 2016
@author: aseyedian
"""
codon = ''
q=0
with open('rosalind_prot.txt', 'r') as prot:
bb = list(prot.read())
mylist = []
for i in range(len(bb)):
mylist.append(bb[i])
for i in range(0, len(bb),3):
mylist[i] = [''.join(mylist[i:i+3])]
for i in range(1, len(mylist), 3):
del mylist[i]
for i in range(2, len(mylist), 3):
del mylist[i]
print mylist
#This is to create a list of codons which then are translated into amino acids
由于某种原因,
for i in range(1, len(mylist), 3):
del mylist[i]
返回IndexError(列表赋值超出范围),但
for i in range(1, len(mylist), 3):
mylist[i] = 'k'
将每一个列表成员变成字母' k'。这是为什么?
仅供参考,我现在尝试做的是将每个核苷酸放入一个列表中,然后将它们分组,然后在将它们合并到第一个列表成员后删除这两个列表成员,然后转到下一个密码子。
例如: [' A',' U'' G'] - > [[' AUG'],' U'' G'] - > [' AUG'],[' GCC' (下一个密码子)]等......
答案 0 :(得分:2)
从列表中删除项目时,它现在具有较少的项目。因此,其长度 - 1位置的列表不再存在。假设您有一个长度为4的列表。一旦您尝试访问位置2的列表,您已经删除了2个项目,并且列表中只剩下2个项目。现在列表在位置2没有任何内容。相反,只有del mylist[0]
。
答案 1 :(得分:1)
考虑一个长度为3
的列表:
l = ['1', '2', '3']
不,我们使用range(len(l))
迭代它:
for i in range(len(l)):
print('i =', i)
print('l[i] =', l[i])
del l[i]
结果如下:
i = 0
l[i] = 1
i = 1
l[i] = 3
i = 2
------------------------------------
IndexError
<ipython-input-6-ab3e74355e73> in <m
1 for i in range(len(l)):
2 print('i =', i)
----> 3 print('l[i] =', l[i])
4 del l[i]
IndexError: list index out of range
所以在第一次迭代中,你删除了第一个元素'1'
,
这使列表保持为['2', '3']
然后我们删除列表的秒元素,现在是'3'
,列表变为['2', ]
。
在第三次迭代中,i = 2
但列表只有一个元素,因此我们得到索引错误。
解决方案是反过来:
for i in reversed(range(1, len(mylist), 3)):
del mylist[i]
答案 2 :(得分:1)
mylist
会发生更改 - 当您仍在使用基于其原始长度生成的索引时,它会包含较少的项目。
例如,
mylist = ['A', 'B', 'C', 'D', 'E']
您的代码假设从列表中删除“B”和“E”(编号1和4),
for i in range(1, len(mylist), 3):
del mylist[i]
然而,在第一次传递“B”被移除后,该列表变为['A','C','D','E']。此时此列表中只有4个项目,并且不再存在第4个项目。
您要做的是从原始列表中获取包含#0,#3,#6,...项目的列表。你可以简单地使用这样的列表切片:
print mylist[0::3]
答案 3 :(得分:1)
不要将bb
复制到mylist
,然后尝试修改mylist
。只需从bb
复制到mylist
:
bb = 'AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA'
mylist = []
for i in range(0, len(bb), 3):
mylist.append(bb[i:i+3])
print mylist
输出:
[&#39; AUG&#39;,&#39; GCC&#39;,&#39; AUG&#39;,&#39; GCG&#39;,&#39; CCC&#39;,& #39; AGA&#39;,&#39; ACU&#39;,&#39; GAG&#39;,&#39; AUC&#39;,&#39; AAU&#39;,&#39; AGU&# 39;,&#39; ACC&#39;,&#39; CGU&#39;,&#39; AUU&#39;,&#39; AAC&#39;,&#39; GGG&#39;,&# 39; UGA&#39;]