gpt4 book ai didi

python - 为什么 .index 只会选择第一次使用的重复词

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:04 24 4
gpt4 key购买 nike

一段时间以来,我一直在努力解决这个问题,但我就是想不通为什么我的代码只显示该词的第一次使用。如果有人可以建议一种快速简便的方法来同时显示这两个词,那就可以了不胜感激。

sentence = input("please insert a sentence").lower()
keyword = input ("please insert a keyword you would like to search for")
splitsentence = sentence.split(" ")
position = sentence.index(keyword)
if keyword in sentence:
print(position)

最佳答案

就是这样index()被设计;只返回第一次出现。

如果你想找到所有出现的地方,你必须在循环或递归中多次调用它。在我们这样做之前,您应该知道您可以提供 startend 参数来定义在句子中搜索的位置:

>>> "cat cat".index("cat")
0
>>> "cat cat".index("cat", 1) # start search from index 1
4
>>> "cat cat".index("cat", 1, 4) # ...and stop search right before index 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

这样我们就可以避免在循环中一直获取相同的索引:

s = "cat cat"
indexes = []

index = -1
while True:
try:
index = s.index("cat", index + 1)
except ValueError:
break
indexes.append(index)

print(indexes)
# Output: [0, 4]

如果你想花哨的话,这里有一个递归生成器:

def find_indices(s, sub, start=0, end=None):
if end is None:
end = len(s)
try:
start = s.index(sub, start, end)
except ValueError:
return
yield start
yield from find_all_indexes(s, sub, start + 1, end)

用法(仍然支持startend 参数):

>>> list(find_indices("cat cat cat cat", "cat"))
[0, 4, 8, 12]

或者如果你想要一个非递归生成器,你可以使用原始的 while 循环并让它 yield 而不是附加到列表:

def find_indices(s, sub, start=0, end=None):
if end is None:
end = len(s)
start -= 1
while True:
try:
start = s.index(sub, start + 1, end)
except ValueError:
break
yield start

用法与之前完全相同。

关于python - 为什么 .index 只会选择第一次使用的重复词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42204813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com