You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何查找字符串中多个目标字符的首个出现位置

如何在Python中查找字符串中首个出现的目标字符集合中的字符位置

嘿,作为Python初学者遇到这个问题很正常,我来帮你理清楚问题所在,再给你几个简单易懂的解决方法。

首先先看看你之前代码的问题:

  1. 第一个用or的写法错误原因:str1.find('+')返回的是+在字符串中的位置(比如你的例子里是3),这个值是非零的真值,所以or逻辑会直接返回这个值,不会再去判断后面的str1.find('-')了,自然得不到字符串中最早出现的运算符位置。
  2. 第二个循环的写法错误原因:str1[x]里的x是字符(比如'-'),你不能用字符作为字符串的索引,应该用字符对应的位置索引;而且找到第一个运算符后没有停止循环,会把所有运算符都输出。

下面是两种适合初学者的正确方法:

方法一:遍历字符串逐个检查(直观易懂)

这个方法一步步遍历字符串的每个字符和它的位置,找到第一个符合条件的运算符就返回位置,遍历完没找到就返回-1,很适合新手理解:

str1 = '12-23+23*12/12'
# 把要找的运算符存在集合里,判断字符是否属于运算符会更快
operators = {'+', '-', '*', '/'}

# enumerate可以同时拿到每个字符的索引和字符本身
for index, char in enumerate(str1):
    if char in operators:
        print(index)  # 输出首个运算符的位置,这里是2
        break  # 找到第一个就停止循环,不用继续遍历
else:
    # 只有当循环正常结束(没碰到break)时才会执行这里,说明没找到任何运算符
    print(-1)

方法二:用生成器表达式结合min函数(简洁高效)

如果你想写更简洁的代码,可以用生成器收集所有找到的运算符位置,然后取最小的那个(也就是最早出现的),没有找到就返回-1:

str1 = '12-23+23*12/12'
operators = '+-*/'

# 生成器表达式:遍历每个运算符,获取它在字符串中的位置
found_positions = (str1.find(op) for op in operators)
# 过滤掉找不到的情况(即返回-1的),然后取最小的位置;如果没有找到任何值,default返回-1
first_position = min((pos for pos in found_positions if pos != -1), default=-1)
print(first_position)  # 输出2

注意:min函数的default参数是Python 3.4及以上版本才支持的,如果你用的版本比较旧,可以先把过滤后的结果转成列表,再判断是否为空:

filtered_positions = [pos for pos in found_positions if pos != -1]
first_position = min(filtered_positions) if filtered_positions else -1

这样两种方法都能帮你找到字符串中首个算术运算符的位置啦,你可以先从第一种方法入手理解,熟悉后再尝试第二种简洁的写法~

内容的提问来源于stack exchange,提问作者Sheshank Ps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:09:48