Python: Транспонирование списка списков (5 простых способов!)
В этом руководстве вы узнаете, как использовать Python для транспонирования списка списков, иногда называемого двумерным массивом. При транспонировании списка списков мы по существу превращаем строки матрицы в ее столбцы, а столбцы - в строки. Это очень полезный навык при изучении машинного обучения.
В этом руководстве вы узнаете, как сделать это с помощью циклов for
, списочных включений, функции zip()
, библиотеки itertools
, а также используя популярную библиотеку numpy для выполнения этой задачи.
Содержание
Что означает транспонировать список списков в Python?
Транспонирование списка списков с помощью Numpy
Использование функции
Zip
для транспонирования списков в PythonИспользование
Itertools
для транспонирования списка списковТранспонирование списка списков с помощью цикла
For
Использование списочного включения для транспонирования списков в Python
Заключение
Что означает транспонировать список списков в Python?
Транспонирование массивов - это распространенная функция, которую часто нужно выполнять при работе над проектами машинного обучения. Но что именно означает транспонировать список списков в Python?
Мы можем рассматривать подсписки в нашем списке списков в Python как строки матрицы. Когда мы транспонируем список списков, мы по существу превращаем строки нашей матрицы в столбцы и столбцы - в строки.
Посмотрим, как это выглядит визуально:
original = [
[1,2,3],
[4,5,6],
[7,8,9]
]
transposed = [
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]
Транспонирование списка списков с помощью Numpy
Python предоставляет отличную утилиту numpy
, которая делает работу с числовыми операциями невероятно простой! Numpy поставляется с различными типами объектов, один из которых - массив numpy.
Эти массивы имеют много общего со списками Python, но также позволяют выполнять ряд полезных математических операций.
Одной из таких операций является транспонирование данных с использованием метода .transpose()
, который также может быть сокращен до .T.
Перед использованием этих методов нам нужно преобразовать наш список или список списков в массив numpy
.
# Транспонирование списка списков в Python с помощью numpy
import numpy as np
list_of_lists = [
[1,2,3],
[4,5,6],
[7,8,9]
]
array = np.array(list_of_lists)
transposed_array = array.T
transposed_list_of_lists = transposed_array.tolist()
# Это то же самое, что: transposed = np.array(list_of_lists).T.tolist()
print(transposed_list_of_lists)
# Возвращает
# [
# [1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]
# ]
Использование функции Zip
для транспонирования списков в Python
Zip
для транспонирования списков в PythonФункция zip()
- невероятно полезный метод, который позволяет получить n-й элемент итерируемого объекта последовательно при переборе нескольких итерируемых объектов.
# Транспонирование списка списков в Python с помощью zip
import numpy as np
list_of_lists = [
[1,2,3],
[4,5,6],
[7,8,9]
]
transposed_tuples = list(zip(*list_of_lists))
# Выглядит как: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
transposed = [list(sublist) for sublist in transposed_tuples]
print(transposed)
# Возвращает
# [
# [1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]
# ]
Использование Itertools
для транспонирования списка списков
Itertools
для транспонирования списка списковИногда при работе со списками списков в Python вы столкнетесь с подсписками разной длины. В этих случаях функция zip()
будет исключать все, что больше длины самого короткого подсписка.
# Транспонирование списка списков в Python с помощью itertools
from itertools import zip_longest
list_of_lists = [
[1,2,3],
[4,5,6],
[7,8,9,10]
]
tranposed_tuples = zip_longest(*list_of_lists, fillvalue=None)
transposed_tuples_list = list(tranposed_tuples)
print(list(transposed_tuples_list))
# Возвращает: [(1, 4, 7), (2, 5, 8), (3, 6, 9), (None, None, 10)]
transposed = [list(sublist) for sublist in transposed_tuples_list]
print(transposed)
# Возвращает
# [
# [1, 4, 7],
# [2, 5, 8],
# [3, 6, 9],
# [None, None, 10]
# ]
Транспонирование списка списков с помощью цикла For
For
Циклы for
в Python - это невероятные инструменты для лучшего понимания работы некоторых алгоритмов.
# Транспонирование списка списков в Python с помощью циклов for
list_of_lists = [
[1,2,3],
[4,5,6],
[7,8,9,10]
]
transposed = list()
for i in range(len(list_of_lists[0])):
row = list()
for sublist in list_of_lists:
row.append(sublist[i])
transposed.append(row)
print(transposed)
# Возвращает
# [
# [1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]
# ]
Использование списочного включения для транспонирования списков в Python
# Транспонирование списка списков в Python с помощью списочного включения
list_of_lists = [
[1,2,3],
[4,5,6],
[7,8,9,10]
]
transposed = [[row[i] for row in list_of_lists] for i in range(len(list_of_lists[0]))]
print(transposed)
# Возвращает
# [
# [1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]
# ]
Заключение
В этой статье вы научились транспонировать список списков или двумерный массив в Python. Вы узнали, как сделать это с помощью популярной библиотеки для науки о данных numpy
, а также используя встроенную функцию zip()
, либо самостоятельно, либо с библиотекой itertools
. Вы также изучили более простые методы выполнения этой задачи с помощью циклов for
и списочных включений в Python.
Чтобы узнать больше о методе numpy transpose
, ознакомьтесь с официальной документацией здесь
Last updated