3 回答

TA贡献1828条经验 获得超4个赞
我希望您可能会发现拥有序列 ID 和序列长度很有用。这使用了与之前的答案相同的列表理解,但它也去掉了换行符 ( \n)。
one_seq = ['>JM_001 hypo pr\n', 'MQGNQST\n', 'HLR\n']
seq_id,seq_len = process_seq(one_seq)
def process_seq(seq_lines):
# using first line, remove >, remove \n and split at spaces taking the first part
seq_id = seq_lines[0].replace('>','').rstrip().split(" ")[0]
# get the sequence length:
seq_len = sum(len(line.rstrip()) for line in seq_lines if not line.startswith('>'))
return (seq_id,seq_len)

TA贡献1810条经验 获得超4个赞
不要认为这段代码需要递归,试试这个:
sum([len(x) for x in one_seq if not x.startswith(">")])
对于每个不以“>”开头的元素,它将使用 len 函数计算字符数。然后将相关元素的所有长度相加得到总长度

TA贡献1790条经验 获得超9个赞
IIUC 您想计算行列表 ( one_seq)中每个元素(或行)的字符数。要计算给定行中的字符数,您可以使用len(),然后利用列表理解并将sum()每行的字符数相加。从您的 OP 来看,您似乎只想在列表中至少有 1行不是以 开头的情况下这样>做,您可以使用any(). 这应该这样做:
sum([len(line) for line in one_seq if any(not l.startswith('>') for l in one_seq)])
测试几个例子:
one_seq = ['>JM_001 hypo pr\n', 'MQGNQST\n', 'HLR\n']
one_seq = ['>JM_001 hypo pr\n', '>MQGNQST\n', '>HLR\n']
one_seq = ['>JM_93rnfo pr\n', '>MQGT\n', 'HKHASDKN\n']
产量:
28
0
29
添加回答
举报