Я не имею ни малейшего представления, зачем вам это нужно (и я смею предположить, что это может быть еще одним случаем xy проблемы ...), и я должен заявить, что немного странно добавлять различные образцы наборов данных для одной проблемы в один пост ... Однако - возможно, вы можете использовать этот:
(Я назвал это "квадратичной цепочкой", потому что mapping
это что-то другое ...)
функция решения:
def quadraticChaining(somelists):
out = []
for i, e in enumerate(somelists[0]):
out.append(e)
for p, sub in enumerate(somelists[1:]):
L = 4**(p+1)
out.append(sub[i*L:(i+1)*L])
return out
... или если вам не нужна вся эта вещь в памяти, а просто хотите перебрать ее
в качестве генератора:
def quadraticChaining(somelists):
for i, e in enumerate(somelists[0]):
yield e
for p, sub in enumerate(somelists[1:]):
L = 4**(p+1)
yield sub[i*L:(i+1)*L]
образец данных:
list1 = ['A'+str(i) for i in range(4)]
list2 = ['B'+str(i) for i in range(4**2)]
list3 = ['C'+str(i) for i in range(4**3)]
list4 = ['D'+str(i) for i in range(4**4)]
list5 = ['E'+str(i) for i in range(4**5)]
list6 = ['F'+str(i) for i in range(4**6)]
пример функции:
quadraticChaining([list1, list2])
# ['A0',
# ['B0', 'B1', 'B2', 'B3'],
# 'A1',
# ['B4', 'B5', 'B6', 'B7'],
# 'A2',
# ['B8', 'B9', 'B10', 'B11'],
# 'A3',
# ['B12', 'B13', 'B14', 'B15']]
или
quadraticChaining([list1, list2, list3])
# ['A0',
# ['B0', 'B1', 'B2', 'B3'],
# ['C0',
# 'C1',
# 'C2',
# 'C3',
# 'C4',
# 'C5',
# 'C6',
# 'C7',
# 'C8',
# 'C9',
# 'C10',
# 'C11',
# 'C12',
# 'C13',
# 'C14',
# 'C15'],
# 'A1',
# ['B4', 'B5', 'B6', 'B7'],
# ['C16',
# 'C17',
# 'C18',
# 'C19',
# 'C20',
# 'C21',
# 'C22',
# 'C23',
# 'C24',
# 'C25',
# 'C26',
# 'C27',
# 'C28',
# 'C29',
# 'C30',
# 'C31'],
# 'A2',
# ['B8', 'B9', 'B10', 'B11'],
# ['C32',
# 'C33',
# 'C34',
# 'C35',
# 'C36',
# 'C37',
# 'C38',
# 'C39',
# 'C40',
# 'C41',
# 'C42',
# 'C43',
# 'C44',
# 'C45',
# 'C46',
# 'C47'],
# 'A3',
# ['B12', 'B13', 'B14', 'B15'],
# ['C48',
# 'C49',
# 'C50',
# 'C51',
# 'C52',
# 'C53',
# 'C54',
# 'C55',
# 'C56',
# 'C57',
# 'C58',
# 'C59',
# 'C60',
# 'C61',
# 'C62',
# 'C63']]
пример генератора:
L = quadraticChaining([list1, list2, list3])
# <generator object quadraticChaining at 0x0000000009993B88>
next(L)
# 'A0'
next(L)
# ['B0', 'B1', 'B2', 'B3']
next(L)
# ['C0',
# 'C1',
# 'C2',
# 'C3',
# 'C4',
# 'C5',
# 'C6',
# 'C7',
# 'C8',
# 'C9',
# 'C10',
# 'C11',
# 'C12',
# 'C13',
# 'C14',
# 'C15']
next(L)
# 'A1'
...