首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的布尔值函数

python中的布尔值函数
EN

Stack Overflow用户
提问于 2021-10-19 10:21:30
回答 2查看 82关注 0票数 0

该函数(filteredFastaToYear)使用另一个不工作的布尔值函数(filterHeaderToYear) .我非常感谢你的帮助:

我的任务如下:

我给出了我的第一个函数(filteredFastaToYear)两个列表:

代码语言:javascript
复制
sequences_inp = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO']  
headers_inp = ['2019-9', '2021-2', '2020-1', '2021-5', '2021-8']

作为输出,我只需要2021年的头和归属序列:

代码语言:javascript
复制
sequences_out = ['DEF', 'JKL', 'MNO']  
headers_out = ['2021', '2021', '2021']

I类型:

代码语言:javascript
复制
sequences_out, headers_out = filteredFastaToYear('2021', sequences_inp, headers_inp)
print(len(sequences_out), len(headers_out))

但是,根据预期的输出,我得到了空列表:

代码语言:javascript
复制
output: 0 0
expected output: 3 3

函数filteredFastaToYear:创建两个筛选列表

代码语言:javascript
复制
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:从所需的年份中选择标题:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2021-10-19 10:29:01

您可以保存自己的bug搜索,并这样做:

代码语言:javascript
复制
out = [(s, h[:4]) for s, h in zip(sequences_inp, headers_inp) if h[:4] == '2021']

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

代码语言:javascript
复制
s, h = list(zip(*out))
票数 1
EN

Stack Overflow用户

发布于 2021-10-19 10:28:02

您将输入年份本身划分为代码。

代码语言:javascript
复制
    for header in listOfHeaders:
        header_split = header.split('-')

这将将2021-19拆分为[2,0,2,1,-,1,9],您还在if filterHeaderToYear(year, listOfHeaders[i]) == year上放置了一个检查,它将永远作为方法返回TrueFalse,并且您正在与year进行比较。

此外,您也不会通过以下操作来迭代完整列表

代码语言:javascript
复制
for i in range(0, len(listOfHeaders) - 1)

它会在最后一个位置之前停止一个位置。

尝试这段代码

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69629109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档