Python:提取嵌套列表中元组对应位置的坐标极值
高效提取嵌套列表对应位置坐标的最小x与最大y
直接用zip(*L0)结合列表推导式就能简洁高效地解决问题,避免冗长的嵌套循环:
示例代码
# 测试用的嵌套列表 L0 = [ [(1, 5), (3, 2), (6, 1)], [(2, 4), (1, 3), (5, 2)], [(0, 6), (2, 1), (7, 0)] ] # 核心实现 result = [ (min(tup[0] for tup in group), max(tup[1] for tup in group)) for group in zip(*L0) ] print(result) # 输出: [(0, 6), (1, 3), (5, 2)]
关键逻辑说明
zip(*L0)的作用:这一步是核心,它会将所有子列表(L1)中对应位置的元组打包成一个个分组。比如上面的例子,zip(*L0)会生成三个分组:- 第一个分组:
((1, 5), (2, 4), (0, 6))(所有L1的第1个元组) - 第二个分组:
((3, 2), (1, 3), (2, 1))(所有L1的第2个元组) - 第三个分组:
((6, 1), (5, 2), (7, 0))(所有L1的第3个元组)
- 第一个分组:
- 计算每个分组的min(x)和max(y):对每个分组,用生成器表达式遍历所有元组,分别提取x坐标(
tup[0])求最小值,提取y坐标(tup[1])求最大值,组合成新的元组。 - 性能优势:Python内置的
min、max函数底层由C实现,比手动嵌套循环的执行效率更高,同时代码更简洁易读。
可选优化写法
如果偏好map的风格,也可以这样写,效果完全一致:
result = [ (min(map(lambda t: t[0], group)), max(map(lambda t: t[1], group))) for group in zip(*L0) ]
内容的提问来源于stack exchange,提问作者storm00
相关产品推荐
相关产品推荐

