📜  在字符串python中查找元素的所有索引(1)

📅  最后修改于: 2023-12-03 15:23:32.324000             🧑  作者: Mango

在字符串Python中查找元素的所有索引

在Python中,我们经常需要在一个字符串中查找某个元素的所有索引。这个操作非常常见,比如在处理自然语言文本、搜索引擎中都需要用到。

方法一:使用find()函数

find()函数可以用来查找某个元素第一次出现的索引。

s = "hello world"
idx = s.find("l")
print(idx) # 2

然而,find()函数只能返回第一个匹配的位置,如果要查找所有的匹配位置,需要使用while循环从头开始查找:

s = "hello world"
sub = "l"
idx = -1
while True:
    idx = s.find(sub, idx + 1)
    if idx == -1:
        break
    print(idx)

这个方法有些繁琐,有没有更简洁的方式呢?当然有!

方法二:使用列表生成式

Python中的列表生成式非常方便,可以用来构造序列。我们可以利用列表生成式来快速查找所有的匹配位置:

s = "hello world"
sub = "l"
idx = [i for i in range(len(s)) if s.startswith(sub, i)]
print(idx) # [2, 3, 9]

这段代码的含义是,对于每个索引i,如果以s[i]开头的子串是我们要查找的串sub,那么将i添加到结果列表中。

值得一提的是,Python的字符串类型本身就是一个序列,所以我们可以直接在字符串上进行迭代:

s = "hello world"
sub = "l"
idx = [i for i, c in enumerate(s) if c == sub]
print(idx) # [2, 3, 9]

这个方法比之前更加简洁,而且执行效率也很高。我们可以在实际应用中根据自己的需要选择不同的方法。