python中的find()和index()方法的使用——查找字符串的子字符串或列表中某个元素的索引位置,简单实用教学!!!

前言

在python中我们在处理字符串或列表类型的数据时,有时需要获取它们其中某个子字符串或元素的索引以确定其位置,方便进行一些计算和统计。而在Python中正好内置了两种方法find()和index()可以帮助我们完成这种操作,接下来我将针对这两种方法,进行基础教学,并在此之上扩展一些使用技巧。

1、find()方法的使用

语法:字符串.find(sub,start,end])
返回子字符串第一次出现的索引,若未找到则返回 -1。
注意
该方法只用于对字符串类型数据的查询

1、参数说明:

  • sub:要查找的子字符串(必填)。

  • start(可选):搜索的起始索引(默认从 0 开始)。

  • end(可选):搜索的结束索引(默认为字符串末尾,不包含此位置)。

2、方法运行机制:

  1. 从左到右搜索字符串。

  2. 当有多个符合条件时,只返回第一个匹配的子字符串的起始索引。

  3. 未找到时返回 -1。

3、案例演示:

案例1:基础查询

# 原始字符串
s = "Hello, welcome to Python!"

# 查找子字符串 "wel" 的索引
index = s.find("wel")
print(index)  # 输出: 7


案例2:限制索引范围查询

# 原始字符串
s = "Hello, welcome to Python!"

# 查找字符 "o"(从索引 5 开始搜索)
index1 = s.find("o",5)
print(index1)  # 输出: 11

# 查找字符 "o"(从索引 5 开始搜索,到索引 10 结束搜索)
index2 = s.find('o',5,10)
print(index2)  # 输出: -1


案例3:未知字符查询

# 原始字符串
s = "Hello, welcome to Python!"

# 查找不存在的子字符串 "java"
index = s.find("java")
print(index)  # 输出: -1

2、index()方法的使用

语法:

  1. 字符串.index(sub,start, end)
  2. 列表.index(sub,start, end)
    返回子字符串或列表元素第一次出现的索引,若未找到则抛出 ValueError 异常。

注意:
该方法可以对字符串和列表两种数据类型进行查询

1、参数说明:

  • sub:要查找的子字符串或列表元素(必填)。

  • start(可选):搜索的起始索引(默认从 0 开始)。

  • end(可选):搜索的结束索引(默认为字符串或列表末尾,不包含此位置)。

2、方法运行机制:

  1. 从左到右搜索字符串或列表元素。

  2. 当有多个符合条件时,只返回第一个匹配的子字符串或列表元素的起始索引。

  3. 未找到时直接抛出异常。

3、案例演示

案例1:基础查询

# 原始字符串
s = "Hello, welcome to Python!"

# 查找子字符串 "wel" 的索引
index1 = s.index("wel")
print(index1)  # 输出: 7

# 原始列表
l = ['我','爱','python']
# 查找列表中元素 '爱' 的索引
index2 = l.index('爱')
print(index2) # 输出:1


案例2:限制索引范围查询

# 原始字符串
s = "Hello, welcome to Python!"

# 查找字符 "o"(从索引 5 开始搜索)
index1 = s.index("o",5)
print(index1)  # 输出: 11

# 查找字符 "o"(从索引 5 开始搜索,到索引 10 结束搜索)
try:
    index2 = s.index('o',5,10)
except ValueError as e:
    print(f"错误信息: {e}")  # 输出: substring not found
# 因为index未查询到目标字符会导致程序报错,这里通过异常处理防止程序崩溃


案例3:未知字符查询

# 原始字符串
s = "Hello, welcome to Python!"

try:
    # 查找不存在的子字符串 "java"
    index = s.index("java")
except ValueError as e:
    print(f"错误信息: {e}")  # 输出: substring not found

3、扩展:查找所有匹配的索引

由于find()index()方法都只能返回匹配到的第一个字符的索引,因此我们需要借助循环来找到字符所有匹配的位置索引。

案例演示:

方法1:使用find()进行查找

# 原始字符串
s = "Python is fun, Python is powerful"
# 需要查找的字符
sub = "Python"
# 存放字符匹配的所有索引
indices = []
# 确定起始索引位置
start = 0

# 通过循环查询所有匹配的索引
while True:
    index = s.find(sub, start)
    if index == -1:
        break
    # 将匹配到的索引放入列表
    indices.append(index)
    start = index + 1  # 移动起始位置继续查找

print(f"所有 '{sub}' 的索引为: {indices}")  # 输出: [0, 15]


方法2:使用index()进行查找,该方法也可以用于查找列表类型的数据

# 原始字符串
s = "Python is fun, Python is powerful"
# 需要查找的字符
sub = "Python"
# 存放字符匹配的所有索引
indices = []
# 确定起始索引位置
start = 0

# 通过循环查询所有匹配的索引
while True:
    try:
        index = s.index(sub, start)
    except:
        break
    # 将匹配到的索引放入列表
    indices.append(index)
    start = index + 1  # 移动起始位置继续查找

print(f"所有 '{sub}' 的索引为: {indices}")  # 输出: [0, 15]

方法3:使用enumerate()方法进行查找,该方法也可以用于查找列表类型的数据

# 原始字符串
s = "hello world"
# 需要查询的字符
char = "o"

# 结合列表推导式,查询所有匹配的索引
indices = [i for i, c in enumerate(s) if c == char]
print(indices)  # 输出: [4, 7]

4、find() 和 index() 的区别

方法未找到时的行为可作用的数据类型适用场景
find()返回 -1字符串安全查找,无需处理异常
index()抛出 ValueError 异常字符串和列表明确知道子字符串存在时使用

5、关键注意事项及总结


1、 大小写敏感:

这两个方法区分大小写。例如 find(“A”) 和 find(“a”) 结果不同。

s = "Apple"
print(s.find("a"))  # 输出: -1


2、子字符串长度:

可以查找任意长度的子字符串,例如 find(“Py”) 会返回起始索引。

s = "Python"
print(s.find("Py"))  # 输出: 0


3、参数范围:

start 和 end 可以是负数,但会被解释为从字符串末尾倒数。

s = "abcdef"
print(s.find("c", -5))  # 输出: 2 (这里-5 相当于索引 1)

总结:

  • 优先使用find():避免异常处理,适合不确定子字符串是否存在的情况。

  • 明确存在时用index():若确定子字符串存在或查找的数据类型为列表时可以用 index() 直接获取索引。

  • 批量查找find()index()结合循环可以查找所有匹配位置,也可以通过enumerate()方法进行查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盲敲代码的阿豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值