Numpy ile listeleme

Aslında diziyi parametre olarak vermek ve bu dizi üzerinde çalışılmasını sağlamak, diziyi fonksiyon içinde tanımlamaya göre daha fonksiyonel bir yaklaşım.

def mul(array):
    return array[0] * mul(array[1:]) if array else 1


def reshape(array, shape=(1, )):
    if len(array) != mul(shape):
        raise ValueError(
            f"cannot reshape array of size {len(array)} "
            f"into shape {shape}"
        )
    if len(shape) == 1:
        return array
    return [
        reshape(
            array=array[i:i + len(array) // shape[0]],
            shape=shape[1:]
        )
        for i in range(0, len(array), len(array) // shape[0])
    ]


# True
assert reshape(array=[*range(12)], shape=(2, 2, 3)) == \
       [[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]

# False
assert reshape(array=[*range(12)], shape=(2, )) == \
       [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]