三维数组

时间:2018-05-09 13:54:13

标签: 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]]

但正如您所看到的,它并没有保持相同的多维形状。有没有人有任何想法?

2 个答案:

答案 0 :(得分:3)

你需要深入迭代一级:

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]]]

答案 1 :(得分:1)

将最内层的循环移动到嵌套的理解中,以便保留内部列表:

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