我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.
我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.
我一直在寻找有用的东西,itertools但我找不到任何明显有用的东西.但是可能会错过它.
我正在寻找一种漂亮的pythonic方法来找到DNA序列中的开放阅读框架.我发现许多在线实现使用索引,标志和其他这样的丑陋.
我很确定可以创建正则表达式实现,但我对正则表达式不好.一般的想法是我想通过'ATG','TAG','TGA'和'TAA'分割出一串DNA序列.但是我不想在重叠区域上分裂,例如序列'ATGA'应该分成'ATG','A'.基本上在三个框架中的每个框架中从左到右.
为清晰起见编辑:如评论中所述,尽管存在(在非零帧中),但ATGATTTTGA应该将一个序列拆分为ATG,TTTTGATGA
edit2:这就是我在没有正则表达式的情况下使用list comprehension splitting链接实现的方法.我讨厌使用旗帜.
def find_orf(seq):
length = 0
stop = ['TAA','TGA','TAG']
for frame in range(3):
orfFlag, thisLen = None, 0
splitSeq = [seq[start+frame:start+frame+3] for start in range(0,len(seq),3)]
for codon in splitSeq:
if codon == 'ATG':
orfFlag = True
thisLen += 1
elif orfFlag and codon in stop:
orfFlag = None
if thisLen > length:
length = thisLen
else:
thisLen += 1
return length
Run Code Online (Sandbox Code Playgroud) 这个问题实际上是用于DNA密码子分析,用简单的方式来说,假设我有一个这样的文件:
atgaaaccaaag ...
而且我想计算这个文件中存在的'aaa'三元组的数量.重要的是,三元组从一开始就开始(这意味着atg,aaa,cca,aag,......)因此在这个例子中结果应该是1而不是2'aaa'.
有没有Python或Shellscript方法来做到这一点?谢谢!
我有一个字符串(十六进制),如:
717765717777716571a7202020
Run Code Online (Sandbox Code Playgroud)
我需要把它变成格式:
0x71,0x77,0x65,0x71,0x77,0x77...
Run Code Online (Sandbox Code Playgroud)
我不确定最好的方法是什么