Python:如何从这个列表中获取边值
我有一个这样的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]