python - python中的布尔值函数
问题描述
该函数 ( 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
解决方案
你可以省去寻找错误的机会,然后这样做:
out = [(s, h[:4]) for s, h in zip(sequences_inp, headers_inp) if h[:4] == '2021']
要将对列表“解压缩”到所需的两个列表中,请使用以下zip(* )
技巧:
s, h = list(zip(*out))
推荐阅读
- delphi - TVirtualStringTree,树结构的位置
- haskell - Haskell Monads 内部
- python - 在 scikit-learn 的多类文本分类包中使用 predict() 和 predict_proba() 的结果不一致
- python - AttributeError:模块'cv2.cv2'没有属性'samples'
- html - div标签混淆试图使输入表单居中
- sql - 不能绑定多部分标识符(INSERT 语句)
- ios - 当 VC 链接到 TabBarController 时,IBOutlet 和 IBAction 被禁用
- python - 为什么 int64 类型不能滚动应用?
- html - NavBar h1 元素卡在顶部
- python - 批量处理来自rabbitmq的消息