从嵌套列表移除含非A/B/L元素的子列表并查找其索引
解决嵌套列表过滤与无效索引记录问题
我来帮你搞定这个需求!你的核心目标是移除所有包含非'A'/'B'/'L'元素的子列表,同时记录这些无效子列表的原始索引。之前的代码只做了元素检查,但没处理索引和列表过滤,我给你整理了更清晰的实现方案:
实现思路
- 遍历原始列表的每个子列表,同时获取它的索引(用
enumerate可以直接拿到索引和子列表,不用手动维护计数器) - 对每个子列表,检查其中所有元素的第一个值是否都属于
{'A', 'B', 'L'}(用all()函数可以简洁完成批量检查) - 把符合条件的子列表加入有效列表,不符合的子列表索引记录到无效索引列表
完整代码示例
# 原始嵌套列表 lists = [[['L', 5], ['B', 20], ['A', 10]], [['B', 200], ['J', 90]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]] # 初始化存储结果的变量 valid_lists = [] invalid_indices = [] # 遍历每个子列表,同时获取索引 for idx, sub_list in enumerate(lists): # 检查当前子列表的所有元素是否都符合要求 is_valid = all(item[0] in {'A', 'B', 'L'} for item in sub_list) if is_valid: valid_lists.append(sub_list) else: invalid_indices.append(idx) # 输出结果 print("处理后的有效列表:") print(valid_lists) print("\n无效子列表的索引:") print(invalid_indices)
运行结果
运行这段代码后,你会得到:
处理后的有效列表: [[['L', 5], ['B', 20], ['A', 10]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]] 无效子列表的索引: [1]
代码优势说明
- 用
enumerate替代手动维护索引,避免了循环计数出错的问题 - 用
all()函数替代嵌套循环检查,代码更简洁易读,逻辑更清晰 - 同时完成有效列表收集和无效索引记录,一次遍历搞定两个需求,效率更高
内容的提问来源于stack exchange,提问作者Kiều Trinh Đỗ
相关产品推荐
相关产品推荐

