Python prevent“for i in range:”切断序列的末端

2024-04-25 01:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个分析蛋白质氨基酸含量的程序(特别是在G/L含量非常丰富的地区)。你知道吗

我将不同长度的序列分成20aa的“块”,使用:

seq = 'MVFRSPLDLYSSHFLLPNFADSHHCSLLLASSGGGSGASGGGGGAGGGGGGNRAGGGGAGGAGGGSGGGGSRAPPEELSMFQLPTLNFSPEQVASVCETLEETGDIERLGRFLWSLPVAPGACEAINKHESILRARAVVAFHTGNFRDLYHILENHKFTKESHGKLQAMWLEAHYQEAEKLRGRPLGPVDKYRVRKKFPLPRTIWDGEQKTHCFKERTRSLLREWYLQDPYPNPSKKRELAQATGLTPTQVGNWFKNRRQRDRAAAAKNRLQHQAIGPSGMRSLAEPGCPTHGSAESPSTAASPTTSVSSLTERADTGTSILSVTSSDSECDV'
w = 20 #chunk size
interval = 20
for i in range(0,len(seq)-w,interval):
   chunk = seq[i:i+w]
   chunk2 = list(chunk)

但是,如果序列不是20的倍数,则该序列的结尾将被截断,如在本例中len(seq)=333

这给了我1-320块,但321-333被忽略。我怎样才能把这些“剩饭剩饭”列在一张单子上?你知道吗


1条回答
网友
1楼 · 发布于 2024-04-25 01:04:22

如果从range调用中取出-w,则可以使现有代码正常工作。切掉序列的结尾是完全合法的,它只会返回比您要求的更短的结果。你知道吗

如果您想用一个伪值来填充序列最后一部分的缺失部分(而不是刚刚缺失的最后一部分),可以使用the ^{} documentation中的grouper配方:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x')  > ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

相关问题 更多 >