我认为第一个块会附加一个列表,其中包含一个较大字符串中子字符串的所有匹配实例的位置。我将此应用于导入txt文件,但为了便于排除故障,我刚刚创建了importTxt。
def blahTxt():
importTxt = ['blhaahblhaahhablahblahlahblahlablhaahlalablahahblahblha', 'blah']
return importTxt
def main():
myList = []
s = blahTxt()[0]
t = blahTxt()[1]
for i in range(len(s)):
if s[i:i] == t:
myList.append(i)
print(myList)
main()
以上代码不会返回位置,只会打印[]
。
def blahTxt():
importTxt = ['blhaahblhaahhablahblahlahblahlablhaahlalablahahblahblha', 'blah']
return importTxt
def main():
myList = []
s = blahTxt()[0]
t = blahTxt()[1]
for i in range(len(s) - len(t)): # added - length of t
if s[i:i + len(t)] == t: # added + length of t
myList.append(i)
print(myList)
main()
当我运行此程序时,myList包含 s 中 t 的所有位置。我在程序中添加了-len(t)和+ len(t),但我无法弄清楚为什么会这样。为什么我需要将 - len(t)添加到范围并将+ len(t)添加到if语句以使该程序生效?
答案 0 :(得分:0)
将print(repr(s [i:i]),repr(s [i:i + len(t)]))添加到您的代码中。您将看到第一个返回一个空字符串。这是因为切片在右边打开...,在一般情况下[a:b]包括位置a但不是b的值。当你想到它时,它是有道理的。 [0:3]应该返回3件事,而不是4件。
答案 1 :(得分:0)
你可以这样想象:
s = 'blhaahblhaahhablahblahl ... ha'
t = 'blah'
# ^ ^
# | |
# s[i : i + len(t)]
s
的子字符串由s[i : i+len(t)]
指定,其方式适用于所搜索字符串的任何长度。
你应该阅读切片表示法,因为你会使用它很多。