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

Python中基于多个部分字符串匹配查找列表元素索引的方法

问题原因

你写的条件('aa' and '3') in s逻辑完全不对。Python中and是逻辑运算符,对非空字符串这类真值,会返回最后一个参与运算的真值,所以'aa' and '3'的计算结果就是字符串'3',你写的判断本质等价于'3' in s——只要元素里带字符3就会被匹配,自然会把所有含3的元素都筛出来,和“同时包含aa和3”的需求完全不符。

正确实现

in关键字一次只能判断单个子串是否存在,要同时匹配多个子串,需要单独写每个子串的存在判断,再用and连接两个逻辑条件即可,代码如下:

mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]
# 同时判断元素包含'aa'且包含'3'
res = [idx for idx, item in enumerate(mylist) if 'aa' in item and '3' in item]
print(res)

运行后输出结果为[0, 2, 5],对应元素分别是索引0的"aa123"、索引2的"aa354"、索引5的"333aa",都是同时包含两个子串的元素。
注:你提到的预期结果里索引4对应的"ab334"仅包含字符3,不存在子串aa,不符合匹配规则,不会被返回。

如果后续需要扩展匹配更多子串,也可以用all()方法简化写法,要同时匹配N个子串时不用写多个and:

target_substrs = ('aa', '3')
res = [idx for idx, item in enumerate(mylist) if all(sub in item for sub in target_substrs)]

两种写法的运行结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:54:38