Понимание списка Python для трехмерного массива - PullRequest
0 голосов
/ 09 мая 2018

У меня есть трехмерный массив в этом формате:

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 голосов
/ 09 мая 2018

Вам нужно повторить еще один уровень глубже:

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]]]
0 голосов
/ 09 мая 2018

Переместите свой внутренний цикл во вложенное понимание, чтобы сохранить внутренние списки:

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