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

在两个列表中匹配子字符串并提取对应键值对的技术求助

嘿,我来帮你搞定这个问题!你遇到的TypeError: expected string or buffer大概率是因为nameList里混入了非字符串类型的元素(比如数字、None或者其他对象),而你用了需要处理字符串的方法(比如正则匹配)去操作这些元素,才触发了这个错误。

下面给你两种靠谱的解决方案,直接就能用:

方法1:基础子串匹配(简单高效)

这种方法用Python原生的in操作符判断子串,同时先检查元素类型,避免报错:

# 示例输入
nameList = ['abc-1', 'def-3', 'abc-2', 'ghi-4']
statusList = ['ok', 'error', 'ok', 'pending']
target_sub = 'abc'

finalNameList = []
finalStatusList = []

# 用zip把两个列表的对应元素配对遍历
for name, status in zip(nameList, statusList):
    # 先确保当前name是字符串,再判断是否包含目标子串
    if isinstance(name, str) and target_sub in name:
        finalNameList.append(name)
        finalStatusList.append(status)

# 输出结果
print(finalNameList)  # ['abc-1', 'abc-2']
print(finalStatusList)  # ['ok', 'ok']

方法2:正则匹配(适合复杂匹配规则)

如果你需要更复杂的匹配逻辑(比如匹配特定格式的子串),可以用正则,但一定要先检查元素类型:

import re

# 示例输入(故意混入非字符串元素模拟报错场景)
nameList = ['abc-1', 'def-3', 'abc-2', 123, None, 'ghi-4']
statusList = ['ok', 'error', 'ok', 'invalid', 'null', 'pending']
# 编译正则模式,提升匹配效率
target_pattern = re.compile(r'abc')

finalNameList = []
finalStatusList = []

for name, status in zip(nameList, statusList):
    # 先过滤非字符串元素,再用正则匹配
    if isinstance(name, str) and target_pattern.search(name):
        finalNameList.append(name)
        finalStatusList.append(status)

# 输出结果
print(finalNameList)  # ['abc-1', 'abc-2']
print(finalStatusList)  # ['ok', 'ok']

额外提醒

  • 确保nameList和statusList的长度一致,zip会以较短的列表为准,长度不一致会导致部分元素被忽略。
  • 如果你的nameList里确定全是字符串,那可以去掉isinstance(name, str)的检查,简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:35