Решение без кучи вложенных циклов. Правда рекурсивное.
def fold(shape, seq):
it = iter(seq)
def fold(i):
if i == len(shape):
return next(it)
return [fold(i + 1) for _ in range(shape[i])]
return fold(0)
print(fold((2, 3, 4), range(1, 1 + 2 * 3 * 4)))
[[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]]
Что можно отформатировать в
[
[
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]
], [
[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]
]
]
Чтение из строки:
data = '''
1 1
1 1
1 1
1 1
'''
print(fold((2, 2, 2), map(int, data.split())))
[[[1, 1], [1, 1]], [[1, 1], [1, 1]]]
Чтение из входного потока:
def ints():
while True:
yield from map(int, input().split())
print(fold((2, 2, 2), ints()))
$ python fold.py
1 1
1 1
1 1
1 1
[[[1, 1], [1, 1]], [[1, 1], [1, 1]]]