Python разделить строку на списки
В этой статье мы расскажем, как можно разбивать строки на списки. Вы узнаете, как при этом использовать разделители (в частности — как отделять часть строки только по первому разделителю и как быть с последовательно идущими разделителями) и регулярные выражения. Безусловно, эта информация будет особенно полезна начинающим питонистам, но, возможно, и более опытные найдут для себя кое-что интересное.
Простое разделение строки и получение списка ее составляющих
Если вы хотите разбить любую строку на подстроки и составить из них список, вы можете просто воспользоваться методом split(sep=None, maxsplit=-1) . Этот метод принимает два параметра (опционально). Остановимся пока на первом из них — разделителе ( sep ).
Разделитель можно задать явно в качестве параметра, но можно и не задавать: в этом случае в его роли выступает пробел.
Пример использования метода split() без указания разделителя:
print("Python2 Python3 Python Numpy".split()) print("Python2, Python3, Python, Numpy".split())
['Python2', 'Python3', 'Python', 'Numpy'] ['Python2,', 'Python3,', 'Python,', 'Numpy']
Разделение строки с использованием разделителя
Python может разбивать строки по любому разделителю, указанному в качестве параметра метода split() . Таким разделителем может быть, например, запятая, точка или любой другой символ (или даже несколько символов).
Давайте рассмотрим пример, где в качестве разделителя выступает запятая и точка с запятой (это можно использовать для работы с CSV-файлами).
print("Python2, Python3, Python, Numpy".split(',')) print("Python2; Python3; Python; Numpy".split(';'))
['Python2', ' Python3', ' Python', ' Numpy'] ['Python2', ' Python3', ' Python', ' Numpy']
Как видите, в результирующих списках отсутствуют сами разделители.
Если вам нужно получить список, в который войдут и разделители (в качестве отдельных элементов), можно разбить строку по шаблону, с использованием регулярных выражений (см. документацию re.split). Когда вы берете шаблон в захватывающие круглые скобки, группа в шаблоне также возвращается как часть результирующего списка.
import re sep = re.split(',', 'Python2, Python3, Python, Numpy') print(sep) sep = re.split('(,)', 'Python2, Python3, Python, Numpy') print(sep)
['Python2', ' Python3', ' Python', ' Numpy'] ['Python2', ',', ' Python3', ',', ' Python', ',', ' Numpy']
Если вы хотите, чтобы разделитель был частью каждой подстроки в списке, можно обойтись без регулярных выражений и использовать list comprehensions:
text = 'Python2, Python3, Python, Numpy' sep = ',' result = [x+sep for x in text.split(sep)] print(result)
['Python2,', ' Python3,', ' Python,', ' Numpy,']
Разделение многострочной строки (построчно)
Создать список из отдельных строчек многострочной строки можно при помощи того же метода split() , указав в качестве разделителя символ новой строки \n . Если текст содержит лишние пробелы, их можно удалить при помощи методов strip() или lstrip() :
str = """ Python is cool Python is easy Python is mighty """ list = [] for line in str.split("\n"): if not line.strip(): continue list.append(line.lstrip()) print(list)
['Python is cool', 'Python is easy', 'Python is mighty']
Разделение строки-словаря и преобразование ее в списки или словарь
Допустим, у нас есть строка, по сути являющаяся словарем и содержащая пары ключ-значение в виде key => value . Мы хотим получить эти пары в виде списков или настоящего словаря. Вот простой пример, как получить словарь и два списка:
dictionary = """\ key1 => value1 key2 => value2 key3 => value3 """ mydict = <> listKey = [] listValue = [] for line in dictionary.split("\n"): if not line.strip(): continue k, v = [word.strip() for word in line.split("=>")] mydict[k] = v listKey.append(k) listValue.append(v) print(mydict) print(listKey) print(listValue)
['key1', 'key2', 'key3'] ['value1', 'value2', 'value3']
Отделение указанного количества элементов
Метод split() имеет еще один опциональный параметр — maxsplit . С его помощью можно указать, какое максимальное число «разрезов» нужно сделать. По умолчанию maxsplit=-1 , это означает, что число разбиений не ограничено.
Если вам нужно отделить от строки несколько первых подстрок, это можно сделать, указав нужное значение maxsplit . В этом примере мы «отрежем» от строки первые три элемента, отделенные запятыми:
str = "Python2, Python3, Python, Numpy, Python2, Python3, Python, Numpy" data = str.split(", ",3) for temp in data: print(temp)
Python2 Python3 Python Numpy, Python2, Python3, Python, Numpy
Разделение строки при помощи последовательно идущих разделителей
Если вы для разделения строки используете метод split() и не указываете разделитель, то разделителем считается пробел. При этом последовательно идущие пробелы трактуются как один разделитель.
Но если вы указываете определенный разделитель, ситуация меняется. При работе метода будет считаться, что последовательно идущие разделители разделяют пустые строки. Например, ‘1,,2’.split(‘,’) вернет [‘1’, », ‘2’] .
Если вам нужно, чтобы последовательно идущие разделители все-таки трактовались как один разделитель, нужно воспользоваться регулярными выражениями. Разницу можно видеть в примере:
import re print('Hello1111World'.split('1')) print(re.split('1+', 'Hello1111World' ))
['Hello', '', '', '', 'World'] ['Hello', 'World']
Преобразование строки в список символов в Python
В этом посте мы обсудим, как преобразовать строку в список символов в Python.
Хотя Python позволяет вам получить доступ к отдельным символам строки с помощью оператора индекса [] а также позволяет легко перебирать строку, но в зависимости от вашего варианта использования вы можете создать список из символов строки. Это может быть достигнуто либо с помощью конструктора списка, либо с помощью понимания списка.
1. Использование list() конструктор
The list() конструктор строит список непосредственно из итерируемого объекта, а поскольку строка является итерируемой, вы можете создать из нее список. Выполнение list(s) на веревке s возвращает список всех символов, присутствующих в строке, в том же порядке, что и символы строки. Итак, все, что вам нужно сделать, это передать ваш строковый объект конструктору списка, как показано ниже:
Преобразование строки в список с сортировкой в лексикографическом порядке
Как преобразовать строку, состоящую из слов разделенных пробелами, в список, и отсортировать полученный список в лексикографическом порядке? Дана строка из слов, разделенных пробелами:
s = 'abc a bCd bC AbC BC BCD bcd ABC'
преобразовываем ее в список, с разделителем «пробел»:
a = s.split(' ')
['abc', 'a', 'bCd', 'bC', 'AbC', 'BC', 'BCD', 'bcd', 'ABC']
если теперь сделать так:
a = a.sort() print (a)
мы не получим ничего, если так:
b = a.sort() print (a)
получим отсортированный список
['ABC', 'AbC', 'BC', 'BCD', 'a', 'abc', 'bC', 'bCd', 'bcd']
почему так? можно ли как-то совместить sort() и split() в одной строчке?
Отслеживать
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
задан 21 мар 2016 в 11:57
Sergey Mokhin Sergey Mokhin
353 3 3 золотых знака 5 5 серебряных знаков 12 12 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
a = sorted(s.split(' '))
В обратном порядке:
a = sorted(s.split(' '), reverse=True)
Отслеживать
ответ дан 21 мар 2016 в 12:15
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
Потому что a.sort() просто сортирует a (список «просто» становится отсортированным), и ничего не возвращает, а функции не возвращающие ничего в Python по факту возвращают None . Если сделать a = a.sort() , вы сначала отсортируете a , а потом запишите поверх него None .
Нужно делать или так:
a = a.split(' ') a.sort() print(a)
Или так, если вам нужно одной строкой:
print(sorted(a.split(' '))
Разница в том, что метод list.sort() меняет исходный список, и ничего не возвращает, а функция sorted() не меняет исходный список, а возвращает его отсортированную копию.
Перевести строку в список
Сделал так, но что-то не работает, выдает пустой список. Видимо, что-то напутал с логикой.
Поправьте пожалуйста.
1 2 3 4 5 6 7 8 9 10 11 12
my_string = '[7, 1, 12, 72, 3, 15, 8, 13]' my_list = [] temp = '' for i in range(len(my_string)): if my_string[i] != ',' or my_string[i] != ' ' or my_string[i] != '[' or my_string[i] != ']': temp += my_string[i] elif temp != '': my_list.append(temp) temp = '' print(my_list)
Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Перевести строку в список
Необходимо перевести строку в список. Концепцию понимаю, но как и что дописать, что бы была.

Строку (‘\n’ разделитель) перевести в список
В общем есть строка вида smth1\nsmth2\nsmth3, нужно из нее зделать список вида . Знаю, что решение.
Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку
3 двунаправленный линейный список строк.требуется вставить строку после строки с номером и удалить.
Перевести список чисел в список соответствующих слов
Перевести список чисел в список соответствующих слов. Турбо пролог
