Извлечь колонки из матрицы

Мне нужно из матрицы вывести все колонки. Ожидаю такой результат: [[1,3,2],[2,4,3],[3,5,4]]. Я знаю про существование Numpy, но мне надо извлечь все колонки из матрицы с помощью lambda.

Пробовала код:

arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: x[0],arr))
print(col)

Результат: [1,3,2] (только первая колонка)

Изменила код на:

arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: x[::],arr))
print(col)

Результат мне вернул мою матрицу без изменений.

Попыталась воспользоваться итерацией:

arr = [[1,2,3],[3,4,5],[2,3,4]]
col = list(map(lambda x: (x[i] for i in range(len(arr))),arr))
print(col)

Но всё равно я не достигла результата.

Я получила вот это:

[<generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE5B10>, <generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE7AC0>, <generator object <lambda>.<locals>.<genexpr> at 0x000001F861CE7C60>]

Я в тупике. Не судите строго, ведь я новичок в Python.


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

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

Чтобы извлечь все колонки из матрицы с помощью lambda, вам нужно обработать данные так, чтобы каждая колонка из всех строк была выделена в отдельный список. В Python это можно сделать с помощью функции map() в сочетании с функцией zip().

Вот как можно изменить ваш код для извлечения всех колонок:

arr = [[1, 2, 3], [3, 4, 5], [2, 3, 4]]
col = list(map(list, zip(*arr)))
print(col)
→ Ссылка
Автор решения: Chaos_Sower

Если так хотите lambda, то можно "сварганить" нечто подобное:

arr = [[1, 2, 3], [3, 4, 5], [2, 3, 4]]

# Получаем количество столбцов
num_cols = len(arr[0])

# Используем list comprehension и lambda для извлечения каждого столбца
cols = [list(map(lambda x: x[i], arr)) for i in range(num_cols)]

print(cols)

Вывод:

[[1, 3, 2], [2, 4, 3], [3, 5, 4]]
→ Ссылка