我正在尝试创建一个可以分析字符串序列的程序。目前,我的程序能够逐个字符检查序列,但我不知道如何清楚地让它识别字符串的结尾,这将是可变的
str_exp="ABCDAABKLYWAKAT"
n=0
x=5
while n<=10:
window=str_exp[n:x]
print window,
n+=1
x+=1
countA=window.count('A')
print countA
这应该输出:
ABCDA 2
BCDAA 2
CDAAB 2
DAABK 2
AABKL 2
ABKLY 1
BKLYW 0
KLYWA 1
LYWAK 1
YWAKA 2
WAKAT 2
您只需要将
while
循环的条件更改为基于len(str_exp)
,它将检测字符串的长度。我让你自己算算,因为你已经掌握了所有的基本知识可以使用
len(s)
获取字符串(或许多其他Python类型)的长度。所以,一种方法是替换这条线:有了这个:
但是,在Python中通常不需要像
n = 0 … while n<=bound: … n+=1
这样的循环;最好用for n in range(bound):
替换所有三行range(5)
只是指[0, 1, 2, 3, 4]
,for n in [0, 1, 2, 3, 4]:
意味着“用n=0
运行这个循环,然后用n=1
,…,然后用n=4
”,这正是n = 0 … while n<=4: … n+=1
的意思。所以:然而,无论哪种方式,都很容易把它搞砸,出现一个错误,你要么错过了最后一个窗口,要么走得太远而错过了它(幸运的是,在Python中,这意味着您只需要打印一个只有4个字符的窗口而不是5个字符,而不是,比方说,用一个segfault崩溃。)因此,最好考虑一种重写代码的方法,这样您就不需要它了
有时候,向后想比向前想容易。我需要一点思考来确定我想从
0
到len(str_exp) - 5
…但是如果我向后定义切片,很明显我可以从5
到len(str_exp)
。如果你也是这样,你可以这样重写:或者,如果两者都不明显,你可以用不同的方式来定义事物。例如,如果要一直到窗口不再是5个字符长:
有更激进的方法来重新思考这个问题。举个例子,您可以编写一个通用的
window
函数,然后您的循环如下所示:您可能还不能编写甚至读取这个
iterwindow
函数。它看起来像这样:但是如果是其他人写的(在标准库中,或者在PyPI上可以找到的模块中),您可以使用它
请执行以下操作:
范围只是创建一个数字列表。通过使最后一个数字成为
str_exp
中的最后一个索引,并通过创建窗口的开头和结尾,您可以确保永远不会从结尾处跑掉将
range
表达式导入python shell以查看它的功能相关问题 更多 >
编程相关推荐