我想要一个遍历下面每个列表项的函数,如果 该项目不带有'>',我希望函数将 每行中的字符然后将它们加在一起'''' ''' 我的第一个问题是我不知道如何在字符串列表中使用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 length
get_seq_length(one_seq)
答案 0 :(得分:0)
不要认为此代码需要递归,请尝试以下操作:
sum([len(x) for x in one_seq if not x.startswith(">")])
对于每个不以“>”开头的元素,它将使用len函数计算字符数。然后将所有相关元素的长度相加,得出总数
答案 1 :(得分:0)
IDLE中的某些内容可以为您提供字符串的第一个字符:
>>> s = "asdf"
>>> s[0]
'a'
您可以访问字符串中的字符,例如数组的元素。如果您尝试超出范围访问某些内容,则会收到错误消息。
因此,如果您知道字符串中至少包含一个元素,
for item in your_list:
if item[0] == '>':
#Do Something
如果您需要不带>
前缀的字符串的总长度,
count = 0
for item in your_list:
if item[0] != '>':
count = count + len(item)
答案 2 :(得分:0)
此函数返回所有不以>开头的条目的长度。它不需要递归,只需遍历列表即可。
def get_seq_length(seq):
count = 0
for line in seq:
if !line.startswith('>'):
count += len(line)
return count
get_seq_length(one_seq)
答案 3 :(得分:0)
IIUC您想计算行列表(cos
)中每个元素(或行)中的字符数。要计算给定行中的字符数,可以使用one_seq
,然后利用列表推导和len()
将每一行的字符数相加。在您的OP中,听起来好像您只想这样做,如果列表中的至少1 行不是以sum()
开头,您可以使用>
。应该这样做:
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']
答案 4 :(得分:0)
我希望您可能会发现拥有序列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)