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

嵌套循环遍历列表报错TypeError:列表索引需为整数或切片而非字符串

问题排查与解决

首先,你遇到的TypeError: list indices must be integers or slices, not str错误,核心原因很明确:

在你的外层循环for n in List中,变量n是直接取的List里的元素值(也就是'A'、'B'、'C'这些字符串),但你在判断条件里写了List[n]——列表只能用整数索引来访问元素,用字符串n当索引当然会触发类型错误。

修正后的基础代码

其实你完全不需要用List[n],因为n本身就是你要对比的目标元素了。同时我们可以把key的拆分逻辑提前,让代码更清晰:

keylist = ['A/P', 'A/Q', 'B/P', 'B/Q', 'C/P', 'C/Q']
target_list = ['A','B','C']  # 把List改成target_list避免和内置list混淆,更规范

for n in target_list:
    for key in keylist:
        # 一次性拆分出前缀和后缀,比多次split更高效
        prefix, suffix = key.split('/')
        if prefix == n and suffix == 'P':
            try:
                print(n)  # 这里替换成你的实际业务操作
            except Exception as e:
                # 建议捕获具体异常,而不是无脑pass,方便排查问题
                print(f"处理{n}时出错: {e}")
                pass

优化建议(可选)

如果你的keylist数据量很大,嵌套循环的效率会比较低。可以先过滤出所有后缀为'P'的key,再进行匹配,减少内层循环的次数:

keylist = ['A/P', 'A/Q', 'B/P', 'B/Q', 'C/P', 'C/Q']
target_list = ['A','B','C']

# 提前过滤出所有后缀为P的key,减少后续循环次数
p_only_keys = [key for key in keylist if key.split('/')[-1] == 'P']

for n in target_list:
    for key in p_only_keys:
        if key.split('/')[0] == n:
            try:
                print(n)
            except Exception as e:
                print(f"错误: {e}")
                pass

或者更简洁的写法,直接遍历符合条件的key即可:

keylist = ['A/P', 'A/Q', 'B/P', 'B/Q', 'C/P', 'C/Q']
target_list = ['A','B','C']

for key in keylist:
    prefix, suffix = key.split('/')
    if prefix in target_list and suffix == 'P':
        try:
            print(prefix)
        except Exception as e:
            print(f"错误: {e}")
            pass

内容的提问来源于stack exchange,提问作者Artur Müller Romanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:05:30