函式 ( 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']
我輸入:
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
uj5u.com熱心網友回復:
您可以節省自己的錯誤搜尋并這樣做:
out = [(s, h[:4]) for s, h in zip(sequences_inp, headers_inp) if h[:4] == '2021']
要將對串列“解壓縮”到您想要的兩個串列中,請使用以下zip(* )技巧:
s, h = list(zip(*out))
uj5u.com熱心網友回復:
您正在代碼中拆分輸入年份本身
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,3
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327752.html
上一篇:Azure函式沒有被執行
