Как превратить строку в список 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
10.9k 2 2 золотых знака 16 16 серебряных знаков 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
716 2 2 серебряных знака 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 "в этих ""данных, есть и запятая"" и кавычки" 

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

Для преобразования строки в список символов необходимо исходную строку передать в класс 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 по фрагменту или шаблону
  • Удаление пунктуации из строки
  • Деление строки по заглавным буквам
  • Создание отчетов и писем по шаблонам

3 варианта, как сконвертировать список(list) в строку в Python 3

Это метод строк — он берет список и соединяет элементы списка в строку.

1. Если у вас список строк, можно просто использовать join.

my_list = ["Pythonist.ru", "-", "хороший", "сайт", "по","Python"] print(" ".join(my_list)) >>>Pythonist.ru - хороший сайт по Python

2. Если это список чисел, вы можете использовать map() для приведения всех элементов списка к строке, а потом просто склеить их в одну строку методом join()

my_list2 = [66, 77, 88, 99] print(" ".join(map(str, my_list2))) >>> 66 77 88 99

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

my_list3 = [11, 22, 33, 44, 55] print(str(my_list3).strip('[]')) >>> 11, 22, 33, 44, 55

Больше 50 задач по Python c решением и дискуссией между подписчиками можно посмотреть тут

Осваиваем Python: преобразование строки в число на конкретных примерах

Иногда требуется преобразовать строку в целое число или в число с плавающей точкой для осуществления определённых операций в Python.

Если вы попробуете выполнить то или иное действие со строкой в виде чисел, то получите ошибку.

Этот код приведёт к ошибке :

str_a = ’50’ b = 10 c = str_a + b print (c)

В Python можно использовать функции int и float для преобразования строки в целое число или число с плавающей точкой до осуществления каких-либо операций.

Обновлено: 2023-05-31 19:18:07 Сергей Бензенко автор материала

Использование функции int() для преобразования строки в целое число

Рассмотрим следующий код:

str_a = '50' b = 10 c = int(str_a) + b print ("The value of c header-42948-2">Преобразование десятичной строки в число с плавающей точкой

Можно использовать класс float для того чтобы осуществить преобразование строки в число с плавающей точкой.

Пример использования float для преобразования строки:

#Пример преобразования string во float str_a = '50.85' b = 10.33 c = float(str_a) + b print ("The value of c 1" data-ab-test="post_related" data-ab-key="yarpp">
Модуль re Python – осваиваем регулярные выражения Python

Замечание: если вы попытаетесь использовать здесь функцию int(), то получите ошибку.

Преобразование списка строковых чисел в список целых чисел

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

Будет создан новый список, в котором можно применить функцию int в каждой итерации.

Код:

#Пример преобразования string в int в списке str_lst = ['1', '2', '3'] int_lst = [int(x) for x in str_lst] print (int_lst)

Будет выведен новый список, состоящий из целых чисел, полученных из строк.

Преобразование списка строк в список чисел с плавающей точкой

Аналогичным образом можно использовать float вместо int для преобразования списка, содержащего строки из целых чисел. Рассмотрим пример:

Код для преобразования элементов списка в числа с плавающей точкой:

#Пример преобразования string во float в списке str_lst = ['10.505', '2.3', '3.99'] float_lst = [float(x) for x in str_lst] print (float_lst)

Пример преобразования строки с запятыми в число

Ну а как насчёт строки наподобие “5,000,000”? Если попытаетесь преобразовать ее, используя функции int() или float() , то получите ошибку.

Решением будет использование import locale . Например:

locale.setlocale(locale.LC_ALL, ‘en_US.UTF-8’ )

Но это может вызвать проблемы в остальных локалях. Другое решение заключается в том, чтобы заменить запятые пустыми строками, то есть“”, а затем использовать функцию int.

str_a = '5,123,000' int_b = int(str_a.replace(',','')) print ("The integer value",int_b)

В результате получаем целое значение. Это же решение можно применить для конвертации строки в число с плавающей точкой.

Преобразование строки в число для расчёта високосного года -пример

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

Для этого введённое значение сначала преобразуется в целое число, а затем используется формула расчёта високосного года.

#Пример расчёта високосного года try: Y = int(input("Enter a Year? ")) exceptValueError: print ("You may only enter digits in '2000' format!") else: leap_or_not = Y%4 == 0 ifleap_or_not: print ("Leap year") else: print ("Not a leap year")

Вводимая строка сразу преобразуется в целое число, а затем используется для расчёта.

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

Для преобразования целых чисел в строки в Python можно использовать функцию str() . Функция str() принимает объект, который может быть типа int , float , double и т.п.

Рассмотрим пример преобразования переменной типа int в строку, которая затем используется как строка для конкатенации:

#Примерпреобразованияint в string a_string = "str function for int to string" a_num = 456 print (a_string + str(a_num))
str function for int to string456

Если бы целочисленная переменная была использована без функции str(), возникла бы ошибка TypeError.

Сергей Бензенко автор-переводчик статьи « 5 examples to Convert a Python string to int and float »

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

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