首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中使用takeWhile

如何在python中使用takeWhile
EN

Stack Overflow用户
提问于 2014-08-04 08:00:52
回答 3查看 5.3K关注 0票数 1

我没有得到正确的答案,但我不知道我的问题在哪里

代码语言:javascript
复制
def GC_content(genetic_string):
    """
    :param genetic_string:
    :return: GC content in percentage
    :testmod

    >>> GC_content("CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT")
    60.919540
    """
    counter = 0.0
    for index in takewhile(lambda x: x is "C" or x is "G", list(genetic_string)):
        counter += 1.0

    return  counter/float(len(genetic_string))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-04 08:05:47

你似乎在寻找:

代码语言:javascript
复制
s = list(genetic_string)
return (s.count('G') + s.count('C')) / float(len(s)) * 100

只要给定的条件保持不变,takewhile只接受可迭代(字符串)开头的字符,但您希望查看整个字符串。换句话说,如果您希望得到60.919540的结果,那么takewhile就不太合适了。

票数 3
EN

Stack Overflow用户

发布于 2014-08-04 08:11:08

因为它只返回上的所有匹配,直到第一个不匹配的才有效。

代码语言:javascript
复制
In [8]: gc = 'CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT'

In [9]: list(takewhile(lambda x: x is "C" or x is "G", gc))
Out[9]: ['C', 'C']
票数 1
EN

Stack Overflow用户

发布于 2014-08-04 08:20:19

您的代码必须如下所示才能根据需要工作:

代码语言:javascript
复制
from itertools import takewhile

def GC_content(genetic_string):
    """
    :param genetic_string:
    :return: GC content in percentage
    :testmod

    >>> GC_content("CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT")
    60.919540
    """
    counter = 0.0

    for c in list(genetic_string):
        if(c == 'C' or c=='G'):
            counter += 1.0

    return  counter/float(len(genetic_string)) * 100


result = GC_content("CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT")
print(result)    # 60.91954022988506

获取返回元素,直到谓词第一次返回"FALSE“(即计数器只增加两倍-对于第一个"CC”字母)。要理解代码中有相同的部分,其逻辑与使用“接受时”相同。

代码语言:javascript
复制
for c in list(genetic_string):
    if(c == 'C' or c=='G'):
        counter += 1.0
    else:
        break

此外,您也忘记将结果乘以100," is“运算符不用于比较值-它比较值的类型(例如检查”整数不是字符串“)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25114093

复制
相关文章

相似问题

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