Python:如何从这个列表中获取边值

-1 投票
3 回答
552 浏览
提问于 2025-04-16 06:00

我有一个这样的Python列表:

a = [
    [[1,2,(3,4)],[1,2,(5)],[-3,3,(3)],[8,-2,(5)]],
    [[1,2,(3,4,5)],[-1,222,(3,4,5)],[99,2,(3)],[8,-2,(4,5)]]
]

每个列表元素中的元组完全没用,请忽略它们并把它们删除。

我想从每个列表元素的每个位置中获取最大值和最小值。

我期望的输出结构是:

li = [[xmin, ymin, xmax, ymax], [xmin, ymin, xmax, ymax] ]

在这个例子中,li是 [[-3, -2, 8, 3], [-1, -2, 99, 222]]

那么有没有什么简单的方法可以做到呢?谢谢!

3 个回答

1

你可以使用 zip 函数:

a = [ [[1,2,(3,4)],[1,2,(5)],[-3,3,(3)],[8,-2,(5)] ],
[[1,2,(3,4,5)],[-1,222,(3,4,5)],[99,2,(3)],[8,-2,(4,5)] ] ]

>>> i, h = zip(*a[0]), zip(*a[1])
>>> [min(i[0]), min(i[1]), max(i[0]), max(i[1])]
[-3, -2, 8, 3]
>>> [min(h[0]), min(h[1]), max(h[0]), max(h[1])]
[-1, -2, 99, 222]
1

如果你有numpy这个库,可以使用numpy.amax。你可以通过设置axis这个参数,来获取数组中某一列的最大值。

0

首先,有个小建议,建议你用元组来表示小的固定长度的列表。也就是说,应该用 (xmin, ymin, xmax, ymax) 这种形式,而不是 [xmin, ymin, xmax, ymax] 这种形式。

[(min(t[0] for t in lst),
  min(t[1] for t in lst),
  max(t[0] for t in lst),
  max(t[1] for t in lst))
 for lst in a]

撰写回答