三维数组的Python列表理解

标签 python list-comprehension

我有一个这种格式的三维数组:

x = [
    [[1,2,3,4,5],[6,7,8,9,10]],
[[11,12,13,14,15],[16,17,18,19,20]],
[[21,22,23,24,25],[26,27,28,29,30]],
[[21,22,23,24,25]]
]

我想将其拆分为以下格式的两个、三个维度数组:

y = [
    [[1,2,3],[6,7,8]],
[[11,12,13],[16,17,18]],
[[21,22,23],[26,27,28]],
[[21,22,23]]
]

z = [
    [[4,5],[9,10]],
[[14,15],[19,20]],
[[24,25],[29,30]],
[[24,25]]
]

我想出了这个创建 y 的列表理解:

[j[:3] for i in x for j in i]

返回这个:

[[1, 2, 3], [6, 7, 8], [11, 12, 13], [16, 17, 18], [21, 22, 23], [26, 27, 28], [31, 32, 33]]

但是正如您将看到的,它不会保持相同的多维形状。有人有什么想法吗?

最佳答案

你需要迭代更深一层:

x = [[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], [[11, 12, 13, 14, 15], [16, 17, 18, 19, 20]], [[21, 22, 23, 24, 25], [26, 27, 28, 29, 30]], [[21, 22, 23, 24, 25]]]
y = [[i[:3] for i in b] for b in x]
z = [[i[-2:] for i in b] for b in x]

输出:

[[[1, 2, 3], [6, 7, 8]], [[11, 12, 13], [16, 17, 18]], [[21, 22, 23], [26, 27, 28]], [[21, 22, 23]]]
[[[4, 5], [9, 10]], [[14, 15], [19, 20]], [[24, 25], [29, 30]], [[24, 25]]]

关于三维数组的Python列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255177/

相关文章:

python-3.x - 使用列表理解来展平元组列表

Python维恩图实际标签

python - 如何在 Python 中扩展这个嵌套列表理解

python - 来自 Process 的简单 wxPython post 事件

python - Python 中的 CL-WHO : clever or just stupid?

python - 仅当单独的 boolean 列表中的元素为真时,才对 python 列表中的元素求和

python - 按 2 个属性对 python 对象列表进行分组

Python:如何将一个列表和一个列表的列表映射在一起

numpy - opencv-python 在苹果 m1 芯片中编译失败

python - 静态类型元编程?