您可以使用len(s)
. 因此,一种方法是替换这一行:
while n<=10:
有了这个:
while n<=len(str_exp) - 5:
但是,您通常不想要n = 0 … while n<=bound: … n+=1
Python 中的循环。最好用 just 替换所有三行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
for n in range(len(str_exp)-5):
但是,无论哪种方式,很容易搞砸并得到一个错误的错误,您要么错过最后一个窗口,要么走得太远并通过它。(幸运的是,在 Python 中,这意味着您只需打印一个只有 4 个字符而不是 5 个字符的窗口,而不是说,由于段错误而崩溃。)因此,通常最好想办法重写您的代码,这样您不需要那个。
有时,向后思考比向前思考更容易。需要花点时间来确定我想从0
to转到len(str_exp) - 5
……但是如果我向后定义切片,对我来说很明显我可以从5
to 转到len(str_exp)
。如果你也是这样,你可以像这样重写它:
for n in range(5, len(str_exp)):
window=str_exp[n-5:n]
…
或者,如果两者都不明显,您可以用不同的方式定义事物。例如,如果你想直到窗口不再长 5 个字符:
for n in range(len(str_exp)):
window=str_exp[n:x]
if len(window) < 5:
break
…
还有更激进的方式来重新思考这一点。举个例子,你可以写一个通用window
函数,然后你的循环看起来像这样:
for window in iterwindow(str_exp, 5):
…
你可能还不能写,甚至读这个iterwindow
函数。它看起来像这样:
def window(iterable, windowlength):
window = ''
for i in iter(iterable):
if len(window) == windowlength:
window = window[1:]
window = window + i
if len(window) == windowlength:
yield window
但是如果其他人已经编写了它(在标准库中,或者您可以在 PyPI 上找到的模块中),您可以使用它。