Python三层嵌套列表定向展开及itertools.product应用问题
嵌套坐标列表展开实现方案
核心逻辑
你需要的能力可以通过「条目类型判断+笛卡尔积展开」的组合逻辑实现,同时兼容原有的二层嵌套输入格式。
完整实现代码
import itertools def format_coord_data(raw_data): processed = [] for entry in raw_data: # 判断当前条目是否为需要展开的三层嵌套结构 is_three_level = any(isinstance(col, list) for col in entry) if is_three_level: # 对三层结构生成笛卡尔积,转换为列表后批量加入结果 for item in itertools.product(*entry): processed.append(list(item)) else: # 二层结构直接保留原条目 processed.append(entry) return processed
测试验证
代入你给出的示例输入:
data = [[["B_01"], ["10"], ["10", "20"], ["10", "20"]], ["D_02", "10", "10", "20"], ["X_03", "10", "10", "20"]] print(format_coord_data(data))
输出结果和你要求的目标格式完全一致:
[ ["B_01", "10", "10", "10"], ["B_01", "10", "10", "20"], ["B_01", "10", "20", "10"], ["B_01", "10", "20", "20"], ["D_02", "10", "10", "20"], ["X_03", "10", "10", "20"] ]
问题对应说明
- 三层嵌套列表的展开:直接对单条三层嵌套的条目解包后传入
itertools.product(),生成的所有组合就是你需要的展开结果,转为列表格式即可 - 仅对三层嵌套条目执行展开:通过
any(isinstance(col, list) for col in entry)判断条目层级,仅命中判断逻辑的条目才会执行展开,原有的二层条目会直接保留,不需要额外处理。
内容的提问来源于stack exchange,提问作者legends1337
相关产品推荐
相关产品推荐

