在python中合并存储在列表中的列表/元组



我有一个列表的列表,每个列表包含一些坐标元组,看起来像这样:

[[(x1, y1), (x2, y2), (x3, y3) ... (xn, yn)], [(x1, y1), (x2, y2), (x3, y3) ... (xn, yn)], [(x1, y1), (x2, y2), (x3, y3) ... (xn, yn)]]

考虑到顺序,我们称外链表为L0,称内链表为L1

L1内部的元组数量可能会随着传入的数据而变化,但对于L0的所有元素来说将是恒定的。例如,如果L1中有3个元组,那么所有其他列表中也会有3个元组。

我的目标是在所有L1元素中获得所有xn坐标的最小值和所有yn坐标的最大值,并返回一个看起来像这样的列表:

[(x1min, y1max), (x2min, y2max), (x3min, y3max) ... (xnmin, ynmax)]

我尝试通过循环L0,然后再次循环L1来获取单个元素,然后尝试构建一个预期输出的新列表,但它很长,我认为效率低下。

我完全不知道如何处理这个问题,我很确定有一个非常聪明和有效的方法来解决这个问题。如果我能得到任何帮助,我将非常感激。

注意:我是一个初学者学习python所以请原谅我,如果我不小心使用了任何错误的术语和东西。此外,这个问题可能是一个非常简单的,但我不能开发一种方法来解决这个问题。我也试着到处搜索,但找不到适合我问题的解决方案

一种简短且相对快速的方法是使用列表推导式:

xmin = min([x for L1 in L0 for x, y in L1])
ymax = max([y for L1 in L0 for x, y in L1])

基本上,您在列表L2中遍历列表L1,并创建一个包含元组的所有第一个元素(对于x)或最后一个元素(对于y)的新列表。然后在这些新列表中调用minmax,它们会给出最大值或最小值参数。

只是为了理解的目的:这个列表推导式[x for L1 in L0 for x, y in L1]相当于用一个显式的for循环构造一个包含所有x值的新列表,像这样:

xelements = []
for L1 in L0:
    for coordinates in L1:
        xelements.append(coordinates[0])

您有一个由其他列表组成的列表。我们称它们为子列表。每个子列表包含许多2元组。难题似乎是找到子列表中所有元组的第0个元素的最小值和第1个元素的最大值。

如果是这种情况,那么(使用一些虚构的数字),您可以这样做:

L = [[(-1, 2), (0, 4)], [(1, 6), (2, 9)]]
M = []
for e in L:
    _min = min(t[0] for t in e)
    _max = max(t[1] for t in e)
    M.append((_min, _max))
print(M)

输出:

[(-1, 4), (1, 9)]