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

标签 python python-2.7

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

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/

相关文章:

python - 如何在 python 中将某些行存储在变量中?

python - RPY2导入包时Matplotlib错误帧单独绘制

python - 缩进的 block 错误Python

python 对数错误地计算出非常小的复数

python - scikit-learn 流形学习函数中的 NaN/inf 值

python - 如何在 while 循环中使用索引每次查找下一个出现的位置

python - Pandas merge_asof : incompatible merge keys [datetime64[ns, 美国/东部] 和 dtype ('<M8[ns]' )

python - 出现条件后停止 Twisted.internet 中的 react 器

Python2.7 : How to create bar graph using index and column information?

python - Pandas ,将日期时间格式 mm/dd/yyyy 转换为 dd/mm/yyyy