# 6 способов преобразовать список Python в строку

В этом руководстве **вы узнаете, как использовать Python для преобразования (или объединения) списка в строку**. Использование Python для преобразования списка в строку — это очень распространенная задача. Существует множество различных способов решения этой проблемы, и вы узнаете о плюсах и минусах каждого из них.

К концу этого урока вы узнаете:

* Как использовать метод `.join()` для преобразования списка Python в строку
* Как использовать функцию `map()` для преобразования списка Python в строку
* Как работать с неоднородными списками при преобразовании списка в строку
* Как использовать циклы for и генераторы списков для преобразования списка Python в строку
* Какой метод является самым быстрым при присоединении списка к строке?

Содержание

* [Краткое напоминание о списках и строках в Python](#kratkoe-napominanie-o-spiskakh-i-strokakh-v-python)
* [Использование .join() для преобразования списка в строку в Python](#ispolzovanie-.join-dlya-preobrazovaniya-spiska-v-stroku-v-python)
* [Использование map() для преобразования списка в строку в Python](#ispolzovanie-map-dlya-preobrazovaniya-spiska-v-stroku-v-python)
* [Использование цикла For для преобразования списка в строку в Python](#ispolzovanie-cikla-for-dlya-preobrazovaniya-spiska-v-stroku-v-python)
* [Скажите List Comprehension, чтобы преобразовать список в строку в Python](#ispolzovanie-list-comprehension-dlya-preobrazovaniya-spiska-v-stroku-v-python)
* [Какой самый быстрый способ преобразовать список в строку в Python?](#kakoi-samyi-bystryi-sposob-preobrazovat-spisok-v-stroku-v-python)
* [Часто задаваемые вопросы](#chasto-zadavaemye-voprosy)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Краткое напоминание о списках и строках в Python

[Списки в Python]() представляют собой контейнерные типы данных, обладающие рядом важных атрибутов. Списки в Python:

1. Упорядоченный, что означает сохраняющий порядок элементов
2. Индексируемый, что означает, что элементы можно выбирать на основе их положения
3. Изменяемый, что означает, что мы можем изменять списки
4. Разношерстный, что означает, что они могут содержать различные типы объектов (подробнее об этом скоро!).

Списки Python создаются путем размещения элементов в квадратных скобках, разделенных запятыми. Давайте посмотрим, как мы можем создать список:

```python
# Создание примера списка
a_list = ['Welcome', 'to', 'bemind.gitbook.io']
```

В кодовом блоке выше мы создали пример списка, который содержит строки.

Строки в Python создаются с использованием одинарных, двойных или тройных кавычек. В отличие от списков в Python, строки неизменяемы. Однако они упорядочены и поддерживают индексацию!

Давайте создадим пример строки на Python:

```python
# Создание примера строки
a_string = 'Welcome to bemind.gitbook.io'
```

Мы видим, что список и строка содержат один и тот же набор английских слов. В этом уроке вы узнаете, как преобразовать список значений в более широкую строку.

### Использование `.join()` для преобразования списка в строку в Python

Строки в Python имеют множество методов, которые можно к ним применять. **Один из этих методов - метод `.join()`, который позволяет использовать строку в качестве символа объединения для соединения списка значений.**

Строка, к которой мы применяем метод `.join()`, представляет собой символ (или символы), который будет находиться между каждым элементом в списке.

Давайте посмотрим, как можно использовать метод `.join()` в Python для преобразования списка в строку

```python
# Использование .join() для преобразования списка в строку
a_list = ['Welcome', 'to', 'bemind.gitbook.io']

a_string = ''.join(a_list)
print(a_string)

# Возвращает: Welcometobemind.gitbook.io
```

Давайте разберем, что мы сделали в приведенном выше коде:

1. Мы объявили наш список строк, `a_list`
2. Затем мы создали новую переменную `a_string`, которая является результатом применения метода `.join()` к пустой строке `''` с передачей нашего списка значений.

Можно видеть, что это вернуло объединенную строку без пробелов между ними!

**Если мы хотим разделить строки, используя символ, такой как пробел, мы можем просто применить метод `.join()` к строке, содержащей этот символ!**

```python
# Использование .join() для преобразования списка в строку
a_list = ['Welcome', 'to', 'bemind.gitbook.io']

a_string = ' '.join(a_list)
print(a_string)

# Возвращает: Welcome to bemind.gitbook.io
```

В приведённом выше коде мы изменили строку, к которой применяем метод, с пустой строки на строку, содержащую только пробел, `' '`

#### Проблемы с использованием .join() для преобразования списка в строку в Python

Метод `.join()` ожидает, что все элементы в списке будут строками. Если какой-либо из элементов не является строкой, метод вызовет исключение `TypeError`, уведомляя пользователя о том, что ожидалась строка.

Посмотрим, как это выглядит:

```python
# Вызов ошибки типа при использовании метода .join()
a_list = ['Welcome', 'to', 'bemind.gitbook.io', 1]

a_string = ' '.join(a_list)
print(a_string)

# Вызывает: TypeError: элемент последовательности 3: ожидался экземпляр str, найден int
```

В следующих разделах вы узнаете, как решить эту ошибку.

### Использование map() для преобразования списка в строку в Python

[Функция `map()`](../vstroennye-funkcii-python/map) позволяет сопоставить весь список значений с другой функцией. Это позволяет легко работать с неоднородными списками (как мы делали выше). Таким образом, мы можем предотвратить возникновение `TypeErrors`, если есть данные нестрокового типа.

Чтобы узнать больше о функции `map()` в Python, прочитайте мое подробное руководство. Давайте посмотрим, как мы можем использовать функцию `map()` с методом `.join()`, чтобы преобразовать список:

```python
# Использование map() с .join() для преобразования списка в строку
a_list = ['Welcome', 'to', 'bemind.gitbook.io', 1]

# Вариант 1:
mapped = map(str, a_list)
a_string = ' '.join(mapped)

# Вариант 2:
a_string = ' '.join(map(str, a_list))

print(a_string)

# Возвращает: Welcome to bemind.gitbook.io 1
```

Давайте разберем, что мы сделали в блоке кода выше:

1. Мы создали список, содержащий как строки, так и целое
2. В Варианте 1 (который работает аналогично, хотя и немного более многословно), мы создали новый объект сопоставления.
3. Объект сопоставления, `mapped`, использует функцию `map()` и принимает вызываемую функцию, которую мы хотим применить к каждому элементу нашего списка.
4. Затем мы передаем этот новый объект карты в метод `.join()`, который объединяет список в строку.

В следующем разделе вы узнаете, как использовать цикл for для преобразования списка в строку.

### Использование цикла For для преобразования списка в строку в Python

Использование [for loop](https://datagy.io/python-for-loop/) позволяет вам перебрать каждый элемент в списке и добавить его к новой строке. Это означает, что вы можете легко объединить список значений.

#### Использование цикла For со списками, состоящими только из строк

Давайте рассмотрим, как это работает при работе со списками, которые содержат только строки.

```python
# Использование цикла for в Python для преобразования списка в строку
a_list = ['Welcome', 'to', 'bemind.gitbook.io']
a_string = ''

for item in a_list:
    a_string += item

print(a_string)

# Возвращает: Welcometobemind.gitbook.io
```

#### Использование цикла For с неоднородными списками

Так же как в нашем предыдущем примере, это вызовет `TypeError`, если мы попытаемся объединить значения, которые не являются строками. Чтобы исправить эту ошибку, мы можем либо:

1. Проверьте, является ли элемент строкой, и если
2. Примените функцию `str()` к каждому элементу в списке.

Давайте посмотрим, как можно использовать второй вариант, так как он требует меньше кода:

```python
# Использование цикла for в Python для преобразования гетерогенного списка в строку
a_list = ['Welcome', 'to', 'bemind.gitbook.io', 1]
a_string = ''

for item in a_list:
    a_string += str(item)

print(a_string)

# Возвращает: Welcometobemind.gitbook.io1
```

#### Использование цикла For с разделителем для объединения списка в строку

Одно из наблюдений заключается в том, что мы просто соединяем элементы без какого-либо разделителя. Мы также можем включить разделитель в цикл for, чтобы сделать наш текст более читабельным.

Давайте посмотрим, как мы можем разделить каждый элемент пробелом, чтобы сделать наш текст более чистым:

```python
# Объединение списка в строку в Python с использованием разделителя
a_list = ['Welcome', 'to', 'bemind.gitbook.io', 1]
a_string = ''

for item in a_list:
    a_string = a_string + ' ' + str(item)

a_string = a_string.strip()

print(a_string)

# Возвращает: Welcome to bemind.gitbook.io 1
```

Давайте разберем, что мы сделали в кодовом блоке выше:

1. Мы объявили наш список и пустую строку
2. Затем мы перебрали каждый элемент и добавили пробел и строковое представление каждого элемента к строке.
3. Затем мы применили метод `.strip()` к нашей финальной строке, чтобы удалить ведущий пробел.

Выражение генератора списка для конкатенации списка в строку.

### Использование List Comprehension для преобразования списка в строку в Python

Мы можем [легко использовать списковые включения](spiskovye-vklyucheniya-v-python-polnoe-rukovodstvo-s-primerami) в сочетании с методом `.join()`, чтобы преобразовать список в строку. Это позволяет работать со списками, которые содержат данные нестроковых типов.

Помните, когда мы пытаемся использовать метод `.join()` со списками, содержащими данные нестрокового типа, возникает `TypeError`. Мы можем исправить эту ошибку, сначала преобразовав каждый элемент списка в строку, используя функцию `str()` в списковом включении. Давайте посмотрим, как это выглядит:

```python
# Использование .join() с различными типами данных
a_list = ['Welcome', 'to', 'bemind.gitbook.io', 1]

comp = [str(item) for item in a_list]
a_string = ' '.join(comp)
print(a_string)

# Возвращает: Welcome to bemind.gitbook.io 1
```

В приведенном выше блоке кода мы использовали списочное понимание для создания строковой копии каждого элемента в списке. Затем мы передали этот новый список в наш вызов метода `.join()`.

Использование списковых включений — это чистый и быстрый способ модификации элементов списка.

### Какой самый быстрый способ преобразовать список в строку в Python?

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

На первом этапе тестирования мы будем использовать гетерогенный список, который требует преобразования элементов в строки, а затем объединения их в результирующую строку. Эти тесты более вероятны, так как часто невозможно гарантировать, что каждый элемент будет строкой.

| Метод                               | Время  |
| ----------------------------------- | ------ |
| `join()` с генератором списков      | 2.5 s  |
| `.join()` вместе с функцией `map()` | 1.69 s |
| Циклы `for`                         | 2.97 s |

Можно увидеть, что метод `.join()` с функцией `map()` является самым быстрым, примерно на 33% быстрее по сравнению

Теперь давайте рассмотрим объединение гетерогенных списков в строку. Чтобы сделать это, нам нужно сравнить метод `.join()` и метод цикла

| Метод       | Время  |
| ----------- | ------ |
| `.join()`   | 205 ms |
| Циклы `for` | 1.43 s |

### Часто задаваемые вопросы

<details>

<summary><strong>Какой лучший способ преобразовать список в строку в Python?</strong></summary>

Наилучший способ преобразовать список в Python в строку — это использовать метод `.join()`. Если ваш список гетерогенный, тогда преобразуйте каждый элемент списка в строку, используя функцию `map()`. Если вы уверены, что ваш список содержит только строки, просто используйте метод `.join()`, так как это самый быстрый метод.

</details>

<details>

<summary>Какой самый быстрый способ преобразовать список в строку в Python?</summary>

Самый быстрый способ преобразовать список в строку - использовать метод `.join()`, если список содержит только строки. Если ваш список содержит данные, которые не являются строками, использование `.join()` вместе с `map()` - самый быстрый метод.

</details>

### Заключение

В этом уроке вы научились использовать Python для преобразования списка в строку. Сначала вы узнали, как это сделать с помощью метода строки `.join()`. Затем вы узнали о сложностях работы со списками, которые могут содержать не только строки. Вы научились использовать циклы `for`, списковые включения и функцию `map()` для объединения списков в строки. Наконец, вы узнали, какой из этих методов является самым быстрым.

### Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с учебными пособиями ниже:

* [Как проверить, является ли строка пустой в Python](../python-strings/kak-proverit-pustaya-li-stroka-v-python)
* [Python String Contains: проверка, содержит ли строка подстроку](../python-strings/python-string-contains-proverka-nalichiya-podstroki-v-stroke)
* [Python: объединение строки и целого числа (Int)](../python-strings/python-konkatenaciya-stroki-i-celogo-chisla-int)
* [Python Strings: Официальная документация](https://docs.python.org/3/library/stdtypes.html#str)
