python中的布尔值函数

2024-10-01 17:24:27 发布

您现在位置: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']

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

功能过滤器表头TOYEAR:从所需年份中选择表头:

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

Tags: 函数列表outputlenoutyearheadersheader
2条回答

你可以省去寻找虫子的麻烦,这样做:

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

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

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

您正在代码中拆分输入年份本身

    for header in listOfHeaders:
        header_split = header.split('-')

这将把2021-19拆分为[2,0,2,1,-,1,9] 另外,您在if filterHeaderToYear(year, listOfHeaders[i]) == year处放置了一个检查,该检查将永远不会作为方法返回TrueFalse执行,并且您正在与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

相关问题 更多 >

    热门问题