Получение нового списка из элементов множества других списков

Суть проблемы в следующем: есть список SBIX и список SBX с множеством значений в 16-тиричном формате (элементов в этом списке может быть очень много. Для примера 3 элемента) :

SBIX=['-19 -','-18 -','-17 -','-16 -','-15 -','-14 -','-13 -','-12 -',
      '-11 -','-10 -','-09 -','-08 -','-07 -','-06 -','-05 -','-04 -']

SBX=['00CA','01FD','FF05'] 

преобразую SBX из 16-тиричной системы в двоичную и получаю список С, путем сложение элементов строки BIN и SBIX:

for i in SBX:
    BIN = format(int(i, 16), '0>16b')          
    С=[x+y for x,y in zip(BIN, SBIX)]
    print(C)     

В результате в данном случае получаю три списка:

['0-19 -', '0-18 -', '0-17 -', '0-16 -', '0-15 -', '0-14 -', '0-13 -', '0-12 -', '1-11 -', '1-10 -', '0-09 -', '0-08 -', '1-07 -', '0-06 -', '1-05 -', '0-04 -']
['0-19 -', '0-18 -', '0-17 -', '0-16 -', '0-15 -', '0-14 -', '0-13 -', '1-12 -', '1-11 -', '1-10 -', '1-09 -', '1-08 -', '1-07 -', '1-06 -', '0-05 -', '1-04 -']
['1-19 -', '1-18 -', '1-17 -', '1-16 -', '1-15 -', '1-14 -', '1-13 -', '1-12 -', '0-11 -', '0-10 -', '0-09 -', '0-08 -', '0-07 -', '1-06 -', '0-05 -', '1-04 -']

Далее необходимо получить 15ть списков вида:

С1=['0-19 -', '0-19 -', '1-19 -']
С2=['0-18 -', '0-18 -', '1-18 -']
С3=['0-17 -', '0-17 -', '1-17 -']

и так далее... Вот на получении этих 15ти списков встал. Буду очень благодарен, если натолкнёте на мысль, как это реализовать. Спасибо!


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

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

Ну можно так, если особо не думать:

arr = []
for i in SBX:
    BIN = format(int(i, 16), '0>16b')          
    C =[x+y for x,y in zip(BIN, SBIX)]
    #print(C)
    arr.append(C)

arr15 = list(zip(*arr))
print(arr15)

Вывод:

[('0-19 -', '0-19 -', '1-19 -'),
 ('0-18 -', '0-18 -', '1-18 -'),
 ('0-17 -', '0-17 -', '1-17 -'),
 ('0-16 -', '0-16 -', '1-16 -'),
 ('0-15 -', '0-15 -', '1-15 -'),
 ('0-14 -', '0-14 -', '1-14 -'),
 ('0-13 -', '0-13 -', '1-13 -'),
 ('0-12 -', '1-12 -', '1-12 -'),
 ('1-11 -', '1-11 -', '0-11 -'),
 ('1-10 -', '1-10 -', '0-10 -'),
 ('0-09 -', '1-09 -', '0-09 -'),
 ('0-08 -', '1-08 -', '0-08 -'),
 ('1-07 -', '1-07 -', '0-07 -'),
 ('0-06 -', '1-06 -', '1-06 -'),
 ('1-05 -', '0-05 -', '0-05 -'),
 ('0-04 -', '1-04 -', '1-04 -')]

Получились, правда, кортежи, а не списки, но если хотите это легко правится:

arr15 = list(map(list,zip(*arr)))

В общем, конструкция zip(*arr) легко транспонирует (поворачивает) список списков.

→ Ссылка