Деление массива(как дерево)

Нужно разбить массив в виде: введите сюда описание изображения

Массив м.б любого размера(длина массива -четное число)

import numpy as np
Y=list()
for i in range(1,9):
    Y.append(i)
MASS=list()
j=0
while len(Y)!=2:
    j+=2
    delit=int(len(Y)/2)
    MASS.append(np.array_split(Y,j))
    Y=np.array_split(Y,delit)

Понятно, что это бред... Может есть идеи?

Решение:

j=0
i=0
while i!=len(Y):
    i+=1
    j = int(len(Y)/(2**i))
    print(j)
    try:
        MASS.append(np.array_split(Y,j))
    except ValueError:
        pass

Ответы (2 шт):

Автор решения: Danis

Если я вас правильно понял то так:

arr = list(range(1, 9))

res = [arr[i:i+2] for i in range(0, len(arr), 2)]
→ Ссылка
Автор решения: Qwertiy

Очень похоже на дерево отрезков

  • Чётной длины недостаточно, нужна степень двойки.
  • Нулевой индекс выкидываем и используем [1..2k+1-1].
  • Для вершины i потомками являются i*2 и i*2+1.
  • Вершины с номерами [2k..2k+1-1] хранят данные.
  • Вершины с номерами [1..2k-1] хранят агрегированные значения.
  • Каждая вершина покрывает весь треугольник под собой.
┌───────────── 01 ─────────────┐
┌───── 02 ─────┐┌───── 03 ─────┐
┌─ 04 ─┐┌─ 05 ─┐┌─ 06 ─┐┌─ 07 ─┐
 08  09  10  11  12  13  14  15
→ Ссылка