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

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

Примечание редакции: об обратном преобразовании читайте в статье “Метод join() и объединение строк в Python”.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Содержание

Что собой представляют строки и списки в Python?

Строки

Строка – это упорядоченная последовательность символов. Это серия символов, в которой один символ следует за другим. Строки берутся в одинарные или двойные кавычки:

# Строка взята в одинарные кавычки
first_name = 'John'

# Строка взята в двойные кавычки
last_name = "Doe"

Если вы хотите создать строку, которая охватывает несколько строк, то есть так называемую многострочную строку, используйте тройные кавычки:

# Многострочная строка, взятая в тройные кавычки

phrase = '''I am learning Python
and I really enjoy learning the language!
'''

Строки неизменяемы. Это означает, что после создания они не могут изменяться. Отдельные символы, составляющие строку, нельзя удалить или заменить.

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

# Попытка заменить 'p' на 'P'
fave_language = "python"
fave_language[0] = "P"

print(fave_language)

# В выводе будет сообщение об ошибке:
# fave_language[0] = "P"
# TypeError: 'str' object does not support item assignment

Однако вы можете обновить переменную, назначив ей в качестве значения новую строку, например так:

fave_language = "python"
fave_language = "Python"

print(fave_language)

# Вывод:
# Python

Списки

Список – это упорядоченная коллекция данных. Несколько элементов (обычно как-то связанных) хранятся вместе под одной переменной.

Вы можете создать список, заключив ноль или более элементов в квадратные скобки []. Элементы в скобках разделяются запятыми.

Список может содержать данные любого типа (строки, числа и т.д.).

# Список чисел
my_numbers_list = [10,20,30,40,50]

print(my_numbers_list)

# Вывод:
# [10, 20, 30, 40, 50]

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

Примечание редакции: об изменяемости читайте в статье “Что такое изменяемые типы данных в Python”.

programming_languages = ["Javascript", "Python", "Java"]

# Обновление первого элемента списка
programming_languages[0] = "JavaScript"

print(programming_languages)

# Вывод:
#['JavaScript', 'Python', 'Java']

Как определить тип данных объекта в Python

Чтобы определить тип данных объекта в Python, используйте встроенную функцию type(). Ее синтаксис: type(object). Функция type() возвращает тип объекта, который был передан в качестве аргумента. Обычно это используется в целях отладки.

Давайте посмотрим, как использовать type() со строками и списками:

my_name = "John Doe"
my_lucky_numbers = [7,14,33]

print(type(my_name))
print(type(my_lucky_numbers))

# Вывод:
# <class 'str'>
# <class 'list'>

Как преобразовать строку в список отдельных символов

Вы можете взять слово и превратить его в список. Каждый символ, составляющий это слово, становится отдельным элементом списка.

Например, возьмем слово “Python”. Его можно преобразовать в список символов так, что каждая буква слова станет отдельным элементом списка. То есть символ P будет первым элементом списка, символ y – вторым, символ t – третьим и так далее.

Самым простым способом преобразования строки в список является приведение типов.

Приведение типа означает прямое преобразование из одного типа данных в другой – в данном случае из строкового типа данных в тип данных списка.

Для этого нужно использовать встроенную функцию list() и передать заданную строку в качестве аргумента.

programming_language = "Python"

programming_language_list = list(programming_language)

print(programming_language_list)

# Вывод:
# ['P', 'y', 't', 'h', 'o', 'n']

Давайте рассмотрим другой пример:

current_routine = " Learning Python ! "

current_routine_list = list(current_routine)

print(current_routine_list)

# Вывод:
# [' ', 'L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', '!', ' ']

Текст " Learning Python ! " содержит пробелы в начале и конце, между словами “Learning” и “Python”, а также между словом “Python” и восклицательным знаком.

Когда строка преобразуется в список символов, каждый пробел рассматривается как отдельный символ, поэтому пробелы тоже становятся элементами списка.

Чтобы удалить пробелы из начала и конца строки можно использовать метод strip():

current_routine = " Learning Python ! "

current_routine_list = list(current_routine.strip())

print(current_routine_list)

# Вывод:
# ['L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', '!']

Чтобы удалить все пробелы, а не только в начале и конце, и вообще не включить пробелы в список, используйте метод replace(). С его помощью можно заменить каждый пробельный символ пустой строкой:

current_routine = " Learning Python ! "

current_routine_list = list(current_routine.replace(" ", ""))

print(current_routine_list)

# Вывод:
# ['L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 'P', 'y', 't', 'h', 'o', 'n', '!']

Как преобразовать строку в список слов

Еще один способ преобразования строки в список – использование метода split(). Этот метод разбивает строку и возвращает список, где каждый элемент – отдельное слово исходной строки.

Общий синтаксис метода split() следующий:

string.split(separator=None, maxsplit=-1)

Давайте разберемся. string – это заданная строка, которую вы хотите превратить в список.

Метод split(), превращающий строку в список, принимает два необязательных параметра:

  • separator определяет, по каким разделителям будет разбиваться строка. По умолчанию разделителем является пробел.
  • maxsplit определяет максимальное количество разбиений. Значение по умолчанию -1 означает, что вся строка будет разбита по разделителям.

Давайте посмотрим на примере, как это работает.

phrase = "I am learning Python !"

print(type(phrase))

# Вывод:
# <class 'str'>

В нашей строке все слова отделены пробелами. Давайте превратим эту строку в список слов, используя метод split(). Нам не нужно указывать разделитель или параметр maxsplit, поскольку мы хотим разбить строку по всем пробелам.

phrase = "I am learning Python !"

phrase_to_list = phrase.split()

print(phrase_to_list)
print(type(phrase_to_list))


# Вывод:
# ['I', 'am', 'learning', 'Python', '!']
# <class 'list'>

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

Как использовать метод split() с параметром separator

С помощью метода split() можно также преобразовать строку в список подстрок, указав любой символ в качестве разделителя. В этом случае строка будет разбиваться не по пробелам, а по указанному символу.

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

Возьмем следующую строку:

phrase = "Hello world,I am learning Python!"

Здесь “Hello world” отделяется от “I am learning Python!” запятой. Если мы хотим использовать эту запятую в качестве разделителя для создания двух отдельных элементов списка, мы сделаем следующее:

phrase = "Hello world,I am learning Python!"

phrase_to_list = phrase.split(",")

print(phrase_to_list)

# Вывод:
# ['Hello world', 'I am learning Python!']

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

Другим примером может быть разделение доменного имени по точкам.

domain_name = "www.freecodecamp.org"

domain_name_list = domain_name.split(".")

print(domain_name_list)

# Вывод:
# ['www', 'freecodecamp', 'org']

Каждый раз, когда появляется точка, в список добавляется новый элемент списка.

Как использовать метод split() с параметром maxsplit

Как упоминалось ранее, maxsplit – это необязательный параметр метода split(). Он определяет, на сколько частей будет разделена строка и, соответственно, сколько элементов попадет в список. По умолчанию maxsplit=-1. Это означает, что строка будет разделена по всем имеющимся в ней разделителям.

Но мы можем изменить значение на конкретное число. Чтобы отделить только два слова от строки, мы установили maxsplit равным двум:

current_routine = "I enjoy learning Python everyday"

current_routine_list = current_routine.split(maxsplit=2)

print(current_routine_list)

# Вывод:
# ['I', 'enjoy', 'learning Python everyday']

Для maxsplit установлено значение 2, что означает максимум два разделения строки (отсчет идет слева). Третьим элементом списка будет оставшаяся часть исходной строки.

Мы можем передать в split() оба аргумента:

domain_name = "www.freecodecamp.org"

domain_name_list = domain_name.split(".", maxsplit=1)

print(domain_name_list)

# Вывод:
# ['www', 'freecodecamp.org']

В этом примере разделителем была точка, а отделен был только первый элемент.

Как преобразовать строку целых чисел в список целых чисел

Числа считаются строками, если они заключены в одинарные или двойные кавычки.

Допустим, дата вашего рождения хранится в виде строки:

birthdate = "19/10/1993"

print(type(birthdate))

# Вывод:
# <class 'str'>

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

birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

print(birthdate_list)
print(type(birthdate_list))

# Вывод:
# ['19', '10', '1993']
# <class 'list'>

В примере разделителем служил слэш, /, и всякий раз, когда появлялся слэш, создавался новый элемент списка.

Если вы внимательно посмотрите на результат, то увидите, что элементы списка все еще являются строками, поскольку они окружены одинарными кавычками и преобразование типов не производилось.

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

Функция map() принимает два аргумента:

  • Функцию. В данном случае это будет функция int.
  • Итерируемый объект. В данном случае это созданный нами список.
birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

str_to_int = (map(int, birthdate_list))

print(str_to_int)

# Вывод:
# <map object at 0x10e289960>

Это не совсем тот результат, который мы хотели получить. Когда мы проверяем тип данных, мы видим, что у нас больше нет списка:

print(type(str_to_int))

# Вывод:
# <class 'map'>

Чтобы исправить это, нам нужно вернуться назад и добавить функцию list() перед преобразованием:

birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

str_to_int = list(map(int, birthdate_list))

print(type(str_to_int))
print(str_to_int)

# Вывод:
# <class 'list'>
# [19, 10, 1993]

Заключение

Вот и все! Теперь вы знаете несколько способов преобразовать строку в список в Python.

Спасибо за прочтение и удачного кодинга!

Перевод статьи Dionysia Lemonaki «Python String to Array – How to Convert Text to a List».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *