为了账号安全,请及时绑定邮箱和手机立即绑定

Python汇总来自不同长度的多行字符

Python汇总来自不同长度的多行字符

largeQ 2021-06-23 18:13:26
我想要一个遍历下面每个列表项的函数,如果该项不带有“>”,我希望该函数计算每行中的字符,然后将它们加在一起''' ''' 我的第一个问题是我不知道如何使用带有字符串列表的 startswith() 类型函数 我的第二个问题是我不知道如何将所有行汇总在一起 此函数需要处理具有任意数量字符的行。示例列表one_seq = ['>JM_001 hypo pr\n', 'MQGNQST\n', 'HLR\n']我正在尝试组合的递归代码def get_seq_length(seq):    if line in seq line.startswith('>'):        return sum(seq)    else:        length = get_seq_length(len(seq))        return lengthget_seq_length(one_seq)
查看完整描述

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)


查看完整回答
反对 回复 2021-06-29
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

不要认为这段代码需要递归,试试这个:

sum([len(x) for x in one_seq if not x.startswith(">")])

对于每个不以“>”开头的元素,它将使用 len 函数计算字符数。然后将相关元素的所有长度相加得到总长度


查看完整回答
反对 回复 2021-06-29
?
富国沪深

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


查看完整回答
反对 回复 2021-06-29
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号