该函数(filteredFastaToYear)使用另一个不工作的布尔值函数(filterHeaderToYear) .我非常感谢你的帮助:
我的任务如下:
我给出了我的第一个函数(filteredFastaToYear)两个列表:
sequences_inp = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO']
headers_inp = ['2019-9', '2021-2', '2020-1', '2021-5', '2021-8']作为输出,我只需要2021年的头和归属序列:
sequences_out = ['DEF', 'JKL', 'MNO']
headers_out = ['2021', '2021', '2021']I类型:
sequences_out, headers_out = filteredFastaToYear('2021', sequences_inp, headers_inp)
print(len(sequences_out), len(headers_out))但是,根据预期的输出,我得到了空列表:
output: 0 0
expected output: 3 3函数filteredFastaToYear:创建两个筛选列表
def filteredFastaToYear(year, listOfSequences, listOfHeaders):
""" output filtered sequence list, header list """
filtListOfSequences = []
filtListOfHeaders = []
""" fasta filtering """
for i in range(0, len(listOfHeaders)-1):
if filterHeaderToYear(year, listOfHeaders[i]) == year:
filtListOfSequences.append(listOfSequences[i])
filtListOfHeaders.append(listOfHeaders[i])
return filtListOfSequences, filtListOfHeaders函数filterHeaderToYear:从所需的年份中选择标题:
def filterHeaderToYear(year, listOfHeaders):
""" split header, find the needed year """
for header in listOfHeaders:
header_split = header.split('-')
if header_split[0] == year:
return True
return False发布于 2021-10-19 10:29:01
您可以保存自己的bug搜索,并这样做:
out = [(s, h[:4]) for s, h in zip(sequences_inp, headers_inp) if h[:4] == '2021']若要将成对列表“解压缩”到所需的两个列表中,请使用zip(* )技巧:
s, h = list(zip(*out))发布于 2021-10-19 10:28:02
您将输入年份本身划分为代码。
for header in listOfHeaders:
header_split = header.split('-')这将将2021-19拆分为[2,0,2,1,-,1,9],您还在if filterHeaderToYear(year, listOfHeaders[i]) == year上放置了一个检查,它将永远作为方法返回True或False,并且您正在与year进行比较。
此外,您也不会通过以下操作来迭代完整列表
for i in range(0, len(listOfHeaders) - 1)它会在最后一个位置之前停止一个位置。
尝试这段代码
def filteredFastaToYear(year, listOfSequences, listOfHeaders):
""" output filtered sequence list, header list """
filtListOfSequences = []
filtListOfHeaders = []
""" fasta filtering """
for i in range(0, len(listOfHeaders)):
if filterHeaderToYear(year, listOfHeaders[i]):
filtListOfSequences.append(listOfSequences[i])
filtListOfHeaders.append(listOfHeaders[i])
return filtListOfSequences, filtListOfHeaders
def filterHeaderToYear(year, listOfHeaders):
""" split header, find the needed year """
header_split = listOfHeaders.split('-')
if header_split[0] == year:
return True
return False
sequences_inp = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO']
headers_inp = ['2019-9', '2021-2', '2020-1', '2021-5', '2021-8']
sequences_out, headers_out = filteredFastaToYear('2021', sequences_inp, headers_inp)
print(len(sequences_out), len(headers_out)) # 3,3https://stackoverflow.com/questions/69629109
复制相似问题