Как в 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]]
