python嵌套列表和数组

标签 python arrays list numpy nested

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

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

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

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

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

[[rect_ID, [(x1,y1),(x2,y2),(x3,y3),(x4,y4)],
[rect_ID, [(x1,y1),(x2,y2),(x3,y3),(x4,y4)],
...
[rect_ID, [(x1,y1),(x2,y2),(x3,y3),(x4,y4)]]

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

有什么想法可以实现吗?

最佳答案

这是使用列表推导式执行此操作的一种方法。

说明:您遍历两个列表(coordsids)的组合,因为它们是一对一映射的。 i[0] 为您提供索引,j.flatten() 将您的每个 coords 数组转换为单个一维数组。然后的任务是创建坐标对作为元组。为此,首先使用 [0::2] 获取从 0 开始的每个偶数索引元素,使用 [0::2] 获取每个从 1 开始的奇数索引元素,使用 [1::2]。使用 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)]]]

关于python嵌套列表和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53904175/

相关文章:

python - Keras 与 Theano 后端

python - 使用霍夫变换或其他图像处理算法检测非直线

arrays - Angular 2 如何遍历多维数组?

c# - 如何在C#中获取类中的变量列表

Python hadoop 流式传输 : Setting a job name

python - 单击程序时遇到问题 - pyautogui

arrays - 如何在 Perl 中序列化数组引用数组?

c - C中的段错误(具有动态内存分配的二维数组)

java - 删除索引 N 处的元素,LinkedList

java - 得墨忒耳法则 - 为什么我需要使用 setter/getter ?