> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-lists/python-transponirovanie-spiska-spiskov-5-prostykh-sposobov.md).

# Python: Транспонирование списка списков (5 простых способов!)

В этом руководстве вы узнаете, как использовать Python для транспонирования списка списков, иногда называемого двумерным массивом. При транспонировании списка списков мы по существу превращаем строки матрицы в ее столбцы, а столбцы - в строки. Это очень полезный навык при изучении машинного обучения.

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

#### Содержание

* Что означает транспонировать список списков в Python?
* Транспонирование списка списков с помощью Numpy
* Использование функции `Zip` для транспонирования списков в Python
* Использование `Itertools` для транспонирования списка списков
* Транспонирование списка списков с помощью цикла `For`
* Использование списочного включения для транспонирования списков в Python
* Заключение

### Что означает транспонировать список списков в 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`, которая делает работу с числовыми операциями невероятно простой! <mark style="color:blue;">**Numpy**</mark> поставляется с различными типами объектов, один из которых - массив `numpy.` Эти массивы имеют много общего со списками Python, но также позволяют выполнять ряд полезных математических операций.

Одной из таких операций является транспонирование данных с использованием метода `.transpose()`, который также может быть сокращен до .T.

Перед использованием этих методов нам нужно преобразовать наш список или список списков в массив `numpy`.

```python
# Транспонирование списка списков в 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()` - невероятно полезный метод, который позволяет получить **n**-й элемент итерируемого объекта последовательно при переборе нескольких итерируемых объектов.

```python
# Транспонирование списка списков в 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` для транспонирования списка списков

Иногда при работе со списками списков в Python вы столкнетесь с подсписками разной длины. В этих случаях функция `zip()` будет исключать все, что больше длины самого короткого подсписка.

```python
# Транспонирование списка списков в 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` в Python - это невероятные инструменты для лучшего понимания работы некоторых алгоритмов.

```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
# Транспонирование списка списков в 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`, ознакомьтесь с [официальной документацией здесь](https://numpy.org/doc/stable/reference/generated/numpy.transpose.html)
