Python中for循环内使用列表推导式匹配提取嵌套数组指定索引元素
现有代码的核心问题
- 逻辑错位:通过
enumerate(arr)得到的i是二维数组外层的遍历索引,并非每个子数组的内部固定索引。判断条件n[i] == file会跟着遍历顺序动态改变要匹配的子数组位置,比如遍历到arr的第2个元素时,i=1,代码会拿子数组的1号索引值和当前遍历的file做匹配,完全偏离「匹配子数组固定0号索引值」的需求 - 定义疏漏:
uniqueFiles中的字符串元素没有加引号,直接运行会触发名称未定义报错 - 额外说明:集合本身会自动去重,你定义里重复书写的
opencountry_test_017只会保留一个,不会触发重复遍历,不影响最终结果
可正确运行的实现方案
完全保留「外层for循环遍历文件集合、内部嵌套列表推导式筛选提取」的结构,修正后的代码如下:
# 修正集合定义,给字符串元素补全引号 uniqueFiles = {'volcano_021', 'opencountry_test_017'} # 给定待处理二维数组 arr = [['volcano_021', 'dusthaze-sky', 5, 1, 251, 55], ['volcano_021', 'rocky-mountain', 11, 75, 249, 256], ['opencountry_test_017', 'overcast-sky', 5, 5, 252, 119], ['opencountry_test_017', 'yellow-field', 4, 140, 254, 250], ['mountain_004', 'blue-sky', 9, 5, 246, 82]] # 初始化分组映射字典 group_result = {} for file in uniqueFiles: # 列表推导式固定匹配子数组0号索引,提取1号索引值 matched_items = [sub[1] for sub in arr if sub[0] == file] group_result[file] = matched_items # 按预期格式打印结果 for file_name, asset_list in group_result.items(): print(f"'{file_name}' => {asset_list}")
实际运行输出
'volcano_021' => ['dusthaze-sky', 'rocky-mountain'] 'opencountry_test_017' => ['overcast-sky', 'yellow-field']
如果需要将arr中出现的所有文件(包括未纳入uniqueFiles集合的
mountain_004)都纳入分组,只需要把外层for循环的遍历对象从uniqueFiles替换为{row[0] for row in arr}即可,不需要修改内部列表推导式的核心逻辑。
内容的提问来源于stack exchange,提问作者lucasbbs
相关产品推荐
相关产品推荐

