首页 > 解决方案 > 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

标签: pythonfunctionbooleanboolean-operations

解决方案


你可以省去寻找错误的机会,然后这样做:

out = [(s, h[:4]) for s, h in zip(sequences_inp, headers_inp) if h[:4] == '2021']

要将对列表“解压缩”到所需的两个列表中,请使用以下zip(* )技巧:

s, h = list(zip(*out))

推荐阅读