嵌套循环遍历列表报错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
相关产品推荐
相关产品推荐

