python嵌套列表和数组

时间:2018-12-23 13:55:02

标签: python arrays list numpy nested

我有一个代码输出,其中在包含嵌套列表的数组列表中提供了几个矩形(四个角x,y)的坐标,如下所示:

constructor(private loader: LoaderService) {
    this.loader.display(true);
    this.subscription = this.dataSvc.data.subscribe(
        data => console.log('Data:', data),
        err => console.log(err),
        () => this.loader.display(false)
    );
}

我还有另一个对应的矩形ID列表。看起来像这样:

[array([[[x1, y1],
        [x2, y2],
        [x3, y3],
        [x4, y4]]], dtype=float32), 
...
array([[[x1, y1],
        [x2, y2],
        [x3, y3],
        [x4, y4]]], dtype=float32)]

它们与坐标的顺序相同。 我想将两个列表混在一起以获得以下数据结构:

[[310]
 [401]
...
 [203]
 [181]]

然后我需要按rect_ID对列表进行排序

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

这是使用列表推导的一种方法。

说明:由于两个列表(coordsids一对一映射,因此您可以对其进行循环浏览。 i[0]为您提供索引,j.flatten()coords的每个数组转换为一个一维数组。然后的任务是将成对的坐标创建为元组。为此,首先使用[0::2]获取以2为步长从0开始的每个偶数索引元素,使用[1::2]以2步进来从1开始的每个奇数索引元素。使用zip,将它们成对组合,然后最后使用list将它们转换为列表[]

最后,您使用ID(第一个元素)作为键对final列表进行排序。

# Sample data (Just taken for example purpose)
coords = [np.array([[[1, 2],
        [2,1],
        [3,2],
        [4,4]]]), 

np.array([[[3,2],
        [1,2],
        [1,4],
        [5,6]]]),

np.array([[[12,2],
        [1,21],
        [1,14],
        [15,6]]])]

ids = [[310],
 [181],[123]]

代码

final = [[i[0], list(zip(j.flatten()[0::2], j.flatten()[1::2]))] for i, j in zip(ids, coords)]

result = sorted(final, key=lambda x: x[0])
print (result)

输出

[[123, [(12, 2), (1, 21), (1, 14), (15, 6)]],
[181, [(3, 2), (1, 2), (1, 4), (5, 6)]],
[310, [(1, 2), (2, 1), (3, 2), (4, 4)]]]