Как в Python перебрать элементы в списке: из столбцов выбрать элементы построчно?

У меня есть список списков a: в списке - набор колонок (вложенные списки).

введите сюда описание изображения

Во вложенных списках находятся колонки с дельтами: от первой до десятой.

А теперь мне надо переверстать вложенные списки, взяв элементы построчно (как выделено цветом). Требуется, чтобы в каждой строке (созданном заново вложенном списке) находились дельты от первой до десятой. Все списки должны лежать в переменной string_one_

Пока у меня получается это сделать, если вручную задать конкретную строку.

Код:

a = [([ 0.30901699,  0.27876826,  0.22123174,  0.14203952,  0.04894348,
        -0.04894348, -0.14203952, -0.22123174, -0.27876826]),
 ([-0.03024874, -0.05753652, -0.07919222, -0.09309604, -0.09788697,
        -0.09309604, -0.07919222, -0.05753652]),
 ([-0.02728778, -0.0216557 , -0.01390382, -0.00479093,  0.00479093,
         0.01390382,  0.0216557 ]),
 ([0.00563208, 0.00775189, 0.00911289, 0.00958186, 0.00911289,
        0.00775189]),
 ([ 0.00211981,  0.001361  ,  0.00046897, -0.00046897, -0.001361  ]),
 ([-0.00075881, -0.00089203, -0.00093794, -0.00089203]),
 ([-1.33224416e-04, -4.59060051e-05,  4.59060051e-05]),
 ([8.73184106e-05, 9.18120102e-05]),
 ([4.49359963e-06])]

string_one_ = []
for elens in a:
    string_one_.append(elens[0])

print(string_one_)

# вывод: 
# [0.30901699, -0.03024874, -0.02728778, 0.00563208, 0.00211981, -0.00075881, -0.000133224416, 8.73184106e-05, 4.49359963e-06]

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

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

Вот так можно

string_one_ = []
for i in range(len(a[0])):
    tmp = []
    for row in a:
        try: tmp.append(row[i])
        except IndexError: break
    string_one_.append(tmp)
    
print(string_one_, sep='\n')

Out:

[[0.30901699, -0.03024874, -0.02728778, 0.00563208, 0.00211981, -0.00075881, -0.000133224416, 8.73184106e-05, 4.49359963e-06], [0.27876826, -0.05753652, -0.0216557, 0.00775189, 0.001361, -0.00089203, -4.59060051e-05, 9.18120102e-05], [0.22123174, -0.07919222, -0.01390382, 0.00911289, 0.00046897, -0.00093794, 4.59060051e-05], [0.14203952, -0.09309604, -0.00479093, 0.00958186, -0.00046897, -0.00089203], [0.04894348, -0.09788697, 0.00479093, 0.00911289, -0.001361], [-0.04894348, -0.09309604, 0.01390382, 0.00775189], [-0.14203952, -0.07919222, 0.0216557], [-0.22123174, -0.05753652], [-0.27876826]]

Или еще так (но это требует больше дополнительной памяти и меняет исходный список a):

for row in a:
    row.extend([None]*(len(a[0])-len(row)))
string_one_ = [[a[j][i] for j in range(len(a)) if a[j][i] is not None] for i in range(len(a[0]))]
print(*string_one_, sep='\n')
→ Ссылка
Автор решения: Алексей Р

Можно использовать zip_longest(), затем отфильтровать None.

from itertools import zip_longest

string_one_ = [list(filter(lambda x: x is not None, el)) for el in zip_longest(*a)]
print(string_one_)
[[0.30901699, -0.03024874, -0.02728778, 0.00563208, 0.00211981, -0.00075881, -0.000133224416, 8.73184106e-05, 4.49359963e-06], [0.27876826, -0.05753652, -0.0216557, 0.00775189, 0.001361, -0.00089203, -4.59060051e-05, 9.18120102e-05], [0.22123174, -0.07919222, -0.01390382, 0.00911289, 0.00046897, -0.00093794, 4.59060051e-05], [0.14203952, -0.09309604, -0.00479093, 0.00958186, -0.00046897, -0.00089203], [0.04894348, -0.09788697, 0.00479093, 0.00911289, -0.001361], [-0.04894348, -0.09309604, 0.01390382, 0.00775189], [-0.14203952, -0.07919222, 0.0216557], [-0.22123174, -0.05753652], [-0.27876826]]
→ Ссылка