Как превратить строку в список python
Перейти к содержимому

Как превратить строку в список python

  • автор:

Преобразование строк в список, кортеж или множество символов

Для преобразования строки в список символов необходимо исходную строку передать в класс list() . Это полезно для каких то преобразований в цикле с отдельными символами в строке (удаление/добавление/изменение) или если нужно отобразить строку наоборот (развернуть строку).

Пример преобразования строки в список символов и совершение различных манипуляции.

>>> line = 'абракадабра' >>> line_list = list(line) >>> line_list # ['а', 'б', 'р', 'а', 'к', 'а', 'д', 'а', 'б', 'р', 'а'] # изменим 4 символ на 'у', добавим в конец 'с' и удалим 1 символ >>> line_list[3] = 'y' >>> line_list.append('c') >>> line_list.pop(0) >>> line_list # ['б', 'р', 'y', 'к', 'а', 'д', 'а', 'б', 'р', 'а', 'c'] # развернем строку >>> rev = list(reversed(line_list)) >>> rev # ['c', 'а', 'р', 'б', 'а', 'д', 'а', 'к', 'y', 'р', 'б'] # теперь снова получим строку >>> line = ''.join(rev) >>> line # 'cарбадакyрб' 

Преобразование строки в кортеж производится аналогичным способом, только строка передается в класс tuple() . Кортеж это неизменяемый тип данных, следовательно дальнейшие изменения кортежа недоступны.

# преобразование строки в кортеж символов >>> line = 'абракадабра' >>> line_tuple = tuple(line) >>> line_tuple # ('а', 'б', 'р', 'а', 'к', 'а', 'д', 'а', 'б', 'р', 'а') # теперь снова получим строку >>> line = ''.join(line_tuple) # 'абракадабра' 

Преобразование строки в множество полезно, когда необходимо получить уникальные символы в строке (без повторов). Обратите внимание на то, что после преобразования строки в множество порядок следования символов не сохраняется!

# преобразование строки в множество символов >>> line = 'абракадабра' >>> line_set = set(line) >>> line_set #

Преобразование символов строки в код ASCII и обратно.

В Python есть возможность выполнить преобразование одиночного символа в его целочисленный код ASCII, для чего нужно передать этот символ функции ord() , она возвращает фактическое числовое значение соответствующего байта в памяти. Обратное преобразование выполняется с помощью функции chr() , она получает целочисленный код ASCII и преобразует его в соответствующий символ:

>>> ord('s') # 115 >>> chr(115) # 's' 

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

>>> x = 'А' >>> y = ord(x) + 1 >>> chr(y) # 'Б' 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Преобразование строки в число
  • Строку в список, кортеж или множество символов
  • Одинарные, двойные и тройные кавычки в строке Python
  • Вывод специальных символов в строке Python «как есть»
  • Объединение и повторение строк
  • Индексирование строк
  • Использование срезов строк
  • Cрез строки Python от заданного символа/знака до конца строки
  • Создание макета для печати базовыми методами строк
  • Способы форматирования текстовых строк
  • Подсчет повторений слов в тексте, деление строки на список слов
  • Удаление слова из строки Python по фрагменту или шаблону
  • Удаление пунктуации из строки
  • Деление строки по заглавным буквам
  • Создание отчетов и писем по шаблонам

Python преобразовать строку в список по разделителю

Как в Python преобразовать строку в список по разделителю «,» Если внутри части строки есть запятая, то эта часть строки выделяется двойными кавычки Например, строку:

данные, «данные, внутри которых есть запятая», «в этих «»данных, есть и запятая»» и кавычки»

преобразовать в список:

['данные', '"данные, внутри которых есть запятая"', '"в этих ""данных, есть и запятая"" и кавычки"'] 

Отслеживать
задан 3 сен 2022 в 10:40
45 5 5 бронзовых знаков

А кавычки точно сбалансированы ? т.е. не надо учитывать запятые после нечетного количества кавычек или как ? И кстати, какие подходы вы уже пробовали для решения

3 сен 2022 в 11:33

Пробовал так: re.split(‘, (?![\w\.\s]+»,)’, my_string) — это работает, если внутри части есть запятая, но нет кавычек

3 сен 2022 в 11:44
3 сен 2022 в 12:24
Двойные кавычки внутри строки должны быть преобразованы в одинарные?
4 сен 2022 в 7:14

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Если из текста убрать пробелы после разделяющих запятых, получится вполне себе формат csv «стандартного» диалекта.

import csv import io text = 'данные,"данные, внутри которых есть запятая","в этих ""данных, есть и запятая"" и кавычки"' with io.StringIO(text) as f: reader = csv.reader(f) for row in reader: print(row) break 
['данные', 'данные, внутри которых есть запятая', 'в этих "данных, есть и запятая" и кавычки'] 

Отслеживать
ответ дан 3 сен 2022 в 16:29
11k 2 2 золотых знака 17 17 серебряных знаков 37 37 бронзовых знаков
Отличная идея делегировать разбор кавычек тому инструменту, который это умеет из коробки )
4 сен 2022 в 7:20

«Если из текста убрать пробелы после разделяющих запятых» — достаточно добавить параметр skipinitialspace=True, т.е. получилось так — reader = csv.reader(f, skipinitialspace=True). skipinitialspace — когда True, пробел сразу после разделителя игнорируется

1 окт 2022 в 13:41

Можно вот так вот попробовать:

result = [] data = 'данные', '"данные, внутри которых есть запятая"', '"в этих ""данных, есть и запятая"" и кавычки"' for d in data: if "," in d: sp = d.split(",") for s in sp: result.append(s) else: result.append(d) print(result) 

Вывод:
[‘данные’, ‘»данные’, ‘ внутри которых есть запятая»‘, ‘»в этих «»данных’, ‘ есть и запятая»» и кавычки»‘]

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

Отслеживать
ответ дан 3 сен 2022 в 12:34
731 3 3 серебряных знака 5 5 бронзовых знаков

Регулярное выражение , |» ищет в строке кавычки и разделители. Флаг quoted означает «в кавычках», его надо переворачивать каждый раз когда видим кавычку. Если флаг сброшен и нашлась запятая её координаты складываются в список разрезов — cuts . В начало списка вставлен разрез в начале строки, в конец списка добавляется конец строки. В списке разрезов чётное число элементов. Каждая последовательная пара элементов указывает кусок текста, который попадёт в ответ:

import re text = 'данные, "данные, внутри которых есть запятая", "в этих ""данных, есть и запятая"" и кавычки"' print(text) cuts = [0] quoted = False for m in re.finditer(', |"', text): if m.group(0) == '"': quoted = not quoted print('quote', m.span(), quoted) elif not quoted: cuts.extend(m.span()) print('unquoted comma', m.span()) cuts.append(len(text)) print("cuts", cuts) it = iter(cuts) for f, t in zip(it, it): print(f, t, text[f:t]) 
$ python parse.py данные, "данные, внутри которых есть запятая", "в этих ""данных, есть и запятая"" и кавычки" unquoted comma (6, 8) quote (8, 9) True quote (44, 45) False unquoted comma (45, 47) quote (47, 48) True quote (55, 56) False quote (56, 57) True quote (79, 80) False quote (80, 81) True quote (91, 92) False cuts [0, 6, 8, 45, 47, 92] 0 6 данные 8 45 "данные, внутри которых есть запятая" 47 92 "в этих ""данных, есть и запятая"" и кавычки" 

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

Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.

Иллюстрация: Оля Ежак для Skillbox Media

Иван Стуков

Иван Стуков
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.

В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.

Преобразование с помощью цикла

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

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

lst = ['Преобразование','через','цикл'] #Создаём пустую строку string = '' #По очереди добавляем к ней каждый элемент списка for el in lst: string += el print(string) >>> Преобразованиечерезцикл

Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.

Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.

#Создаём список, в котором есть как строки, так и цифры lst = ['Преобразование','через','цикл', 2] string = '' for el in lst: string += str(el) #Превращаем каждый элемент списка в строку print(string) >>> Преобразованиечерезцикл2

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

lst = ['Преобразование','через','цикл', 3] string = '' for el in lst: #Добавляем к строке элемент списка string += str(el) #Добавляем к строке разделитель — в данном случае пробел string += ' ' print(string) >>> Преобразование через цикл 3

Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.

Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().

Преобразование с помощью метода join()

Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:

string.join(lst)

В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.

Посмотрим, как join() применяется на практике.

lst = ['Преобразование', 'через', 'метод', 'join()'] #Объединяем элементы списка с пустым разделителем print(''.join(lst)) >>> Преобразованиечерезметодjoin() #Устанавливаем пробел в качестве разделителя print(' '.join(lst)) >>> Преобразование через метод join()

Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.

Использовать выражение-генератор

Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.

lst = [1, 1.2, 'строка', False] print(' '.join(str(el) for el in lst)) >>> 1 1.2 строка False

Конструкция str(el) for el in lst означает, что каждый элемент el в списке lst будет превращён в строку с помощью функции str (стандартной функции Python, которую мы уже использовали, когда работали с циклом).

Использовать функцию map()

Функция map() умеет делать то же самое, что и выражение-генератор, но их синтаксис отличается. В качестве первого аргумента она принимает саму операцию, в качестве второго — список, к элементам которого эта операция применяется.

lst = [1, 1.2, 'строка', False] print(' '.join(map(str, lst))) >>> 1 1.2 строка False

Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.

Итоги

Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().

Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().

Читайте также:

  • Списки в Python: что это такое и как с ними работать
  • Тест. Какой язык создадите вы — Java или Python?
  • Язык Go: что под капотом и зачем программисту учить его как второй

Преобразование строк в Python

Python является одним из самых популярных и востребованных языков программирования. Он имеет большое количество встроенных методов и функций, в том числе и для работы со строками. Часть из них будет использована в данной инструкции, но об этом немного позже.

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

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

Преобразование строк

Преобразование строк – это процесс перехода от строкового типа данных к другому, реализованный с помощью встроенных методов Python.

Данный процесс может понадобиться пользователю в самых разных случаях. Ниже приведем список некоторых из них:

  • Информация, полученная от пользователя.

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

  • Информация, считанная с файлов.

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

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

  • Сравнение строк.

Если пользователь хочет выполнить сравнение двух строк, они обязательно должны быть приведены к одному типу данных. А вот выбор этого типа зависит от требований к сравнению. Например, пользователь хочет выяснить, какое из чисел в сравниваемых последовательностях больше. Для этого он преобразует строки в числовой формат данных, а затем выполняет сравнение.

Исходя из примеров выше, можно утверждать, что без преобразования строк невозможно правильно выполнить требуемые операции в своем коде. С реализацией данного процесса помогут методы, встроенные в Python. Им и будет отведена оставшаяся часть этой инструкции.

Строка → Целое число

В первую очередь поговорим о преобразовании последовательности символов в числа. Первый метод, который будет рассмотрен – это int() . Он предназначен для преобразования строки в целое число в Python . Его синтаксис выглядит следующим образом:

int(example_string)

В качестве аргумента он принимает исходную последовательность символов, а затем преобразует ее к целому числу.

Рассмотрим на примере:

example_string = "112"
result = int(example_string)
print(result)

Результат работы продемонстрирован на картинке ниже.

Если аргумент функции содержит не только цифры, а например буквы или другие символы, то int() не сможет выполнить преобразование и выведет ошибку ValueError . Однако в некоторых случаях это можно обойти. Например, пользователь передал в аргумент число в шестнадцатеричной системе счисления, что подразумевает наличие букв в такой последовательности. В этом случае используется дополнительный аргумент, который указывает на основание системы счисления. Он даст понять среде разработке, что перед ней представлено именно число.

Рассмотрим данную ситуацию на примере:

example_string = "A1"
result = int(example_string, 16)
print(result)

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

Как мы видим, код успешно выполнен и программа преобразовала строку в десятичное целое число 161.

Строка → Вещественное число

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

Приведем пример использования функции:

example_string = "112.112"
result = float(example_string)
print(result)

В данном примере мы преобразуем последовательность символов 112.112 в число с плавающей точкой. Результат представлен на картинке ниже.

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

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

example_string = "112.112"
result = round(float(example_string),1)
print(result)

После дополнительных преобразований результат получился следующим:

На этом о преобразовании строк в числа мы закончим и перейдем к не менее важному типу данных – списку.

Строка → Список

В данном разделе инструкции мы рассмотрим преобразование строк в списки в Python , а именно функцию split() .

Списки – это перечисленные через запятую элементы, которые обязательно заключены в квадратные скобки. Все элементы списка имеют свой уникальный идентификатор (индекс). Типы данных у элементов могут различаться.

Теперь поговорим о самой функции split() . Она выполняет разделение строки на список подстрок, используя разделитель. По умолчанию он равен пробелу, но его можно изменить при необходимости. Для этого при вызове функции нужно указать уникальный разделитель, по которому будет происходить формирование списка из последовательности символов.

Рассмотрим применение данной функции на примере:

example_string = "Monkey-Lion-Tiger"
example_list = example_string.split("-")
print(example_list)

В результате мы получим список из 3 элементов, как показано на картинке ниже.

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

Строка → Дата

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

Метод strptime

Рассматриваемый метод принадлежит модулю datetime . Он создает объект даты и времени из строки, соответствующей указанному формату.

Синтаксис рассматриваемого метода выглядит следующим образом:

datetime.strptime (date_string, date_format)

Рассмотрим ниже пример, где у нас есть последовательность символов 2023-01-01 12:30:31 , которую необходимо преобразовать в дату и время. В первую очередь инициализируем модуль, а затем уже пишем оставшийся код:

from datetime import datetime

date_string = "2023-01-01 12:30:31"
date_object = datetime.strptime(date_string, "%Y-%d-%m %H:%M:%S")
print(date_object)

В качестве формата даты и времени в примере мы указали %Y-%d-%m %H:%M:%S , но у вас он может отличаться, т.к. напрямую зависит от формата даты в исходной строке.

Как видно по картинке ниже, преобразование выполнено успешно.

Функция parser.parse

Теперь перейдем к модулю dateutil и его функции parser.parse . Действует она также, как и предыдущий метод, но есть одно отличие. Заключается оно в том, что функция parser.parse автоматические определяет формат указанной даты.

Синтаксис вызова функции выглядит следующим образом:

parser.parse(example_string)

Теперь рассмотрим ее использование на примере, не забывая объявить модуль в начале кода:

from dateutil import parser

date_string = "2023-01-01 12:30:31"
date_object = parser.parse(date_string)
print(date_object)

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

Строка → Функция

Функция – это некоторый фрагмент кода, который отвечает за выполнение конкретной задачи и может быть использован множество раз. У пользователя может возникнуть ситуация, когда этот фрагмент кода будет закреплен за переменной строкового типа и ее необходимо преобразовать в функцию. С этим ему поможет встроенная функция eval() .

Eval() анализирует все данные, которые были переданы ей в качестве аргумента, после чего выполняет полученное выражение, если это возможно. Она отлично подходит для преобразования строки в функцию в Python.

Ее синтаксис выглядит следующим образом:

eval(выражение)

Рассмотрим использование eval() на примере:

example_string = "print('Hello, user!')"
eval(example_string)

В данном примере мы храним вызов функции print() в переменной example_string . Eval() , в свою очередь, принимает в качестве аргумента содержимое этой переменной и вызывает считанное выражение.

Как видно по картинке ниже, вызов функции успешно выполнен.

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

Строка → Байты

Байты – это последовательность, которая, в отличие от строк, состоит из отдельных байтов. Их синтаксис примерно такой же, как и у обычной последовательности символов. Единственное отличие – это префикс b , расположенный перед началом последовательности.

С преобразованием строк в байты в Python нам поможет функция encode() . Она выполнит кодировку необходимой последовательности символов и вернет строку байтов. Все, что нужно указать при ее вызове – это имя кодировки. По умолчанию используется utf-8.

Рассмотрим использование encode() на примере:

example_string = "Hello, user!"
example_bytes = example_string.encode()
print(example_bytes)

В результате мы получили байтовую версию указанной строки в переменной example_string , как показано на картинке ниже.

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

Строка → Словарь

Словарь – это некая структура данных, которая хранит пары в виде «Ключ — Значение».

В данной главе рассмотрим два способа преобразования строки в словарь в Python.

json.loads()

Первая рассматриваемая функция json.loads() относится к модулю json . Она принимает исходную последовательность символов в формате JSON и преобразует ее в словарь.

В начале написания кода обязательно импортируем модуль json .

import json

json_string = ''
result = json.loads(json_string)
print(result)

Как итог, мы получили словарь с 3 парами, продемонстрированный на картинке ниже.

ast.literal_eval()

Следующей метод, который мы рассмотрим в данной главе, – ast.literal_eval() . Он принадлежит модулю ast и выполняет ту же функцию, что и прошлый метод.

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

import ast

example_string = ""
result = ast.literal_eval(example_string)
print(result)

Здесь мы использовали те же данные, что и в прошлом примере. В результате мы получили точно такой же словарь, как и при использовании метода json.loads() .

Единственное отличие метода ast.literal_eval() от прошлого в том, что последовательность символов, которую он принимает, должна быть в формате словаря, а не в формате JSON.

Заключение

В данной инструкции мы рассмотрели 7 преобразований строк в другие типы данных. Кроме того, к каждому из них мы привели примеры и альтернативные способы преобразования. Надеемся, полученная из этой статьи информация поможет вам правильно взаимодействовать со строковым типом данных при написании кода.

Добавить комментарий

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