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

Как из строки сделать список python

  • автор:

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

Как преобразовать строку, состоящую из слов разделенных пробелами, в список, и отсортировать полученный список в лексикографическом порядке? Дана строка из слов, разделенных пробелами:

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() в одной строчке?
Отслеживать
77k 6 6 золотых знаков 57 57 серебряных знаков 123 123 бронзовых знака
задан 21 мар 2016 в 11:57
Sergey Mokhin Sergey Mokhin
363 3 3 золотых знака 5 5 серебряных знаков 12 12 бронзовых знаков

2 ответа 2

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

a = sorted(s.split(' ')) 

В обратном порядке:

a = sorted(s.split(' '), reverse=True) 

Отслеживать
ответ дан 21 мар 2016 в 12:15
77k 6 6 золотых знаков 57 57 серебряных знаков 123 123 бронзовых знака

Потому что a.sort() просто сортирует a (список «просто» становится отсортированным), и ничего не возвращает, а функции не возвращающие ничего в Python по факту возвращают None . Если сделать a = a.sort() , вы сначала отсортируете a , а потом запишите поверх него None .

Нужно делать или так:

a = a.split(' ') a.sort() print(a) 

Или так, если вам нужно одной строкой:

print(sorted(a.split(' ')) 

Разница в том, что метод list.sort() меняет исходный список, и ничего не возвращает, а функция sorted() не меняет исходный список, а возвращает его отсортированную копию.

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?

Zarom

Поскольку вы очень редко отмечаете ответы как правильные, отвечать я вам не буду. И другим не советую.

Yura Khlyan @MAGistr_MTM
Где здесь строка [‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]? У вас список
Дмитрий Шицков, Где вы видите строку?

Amigun

Amigun @Amigun Автор вопроса

Yura Khlyan, ВОТ ИМЕННО, ЭТО СПИСОК. НО СТРОКА
Типа, можно изобразить как:
x = ‘[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]’
Оттуда нельзя элементы вызвать, т.к. это строка.
А мне нужно превратить в список

Amigun, Это список строк.
Решения вопроса 1

fox_12

Владимир Куц @fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами

Как преобразовать эту строку в список? Чтобы я мог вызывать элементы

например 2 элемент

>>> import json >>> str1 = "['Первое', 'Второе', 'Третье', 'Четвертое']" >>> json.loads(str1.replace("'", '"'))[1] 'Второе'

P.S. В оригинале у вас не совсем корректный список в строке — «Первое» не закрывается кавычкой.
[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]
Если это не «бага а фича» . — то нужны дополнительные шаги для приведения списка к корректному виду.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Ответы на вопрос 3
Zotik204783 @Zotik204783
str = «[‘Первое’, ‘Второе’, ‘Третье’, ‘Четвертое’]»
lst = eval(str)
print(lst[1])
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
undisclosed @undisclosed

Если у вас именно строка задается в таком виде: «[‘Первое, ‘Второе’, ‘Третье’, ‘Четвертое’]», то можно разделить ее по разделителю «, » и получить список элементов с кавычками в таком виде:

["['Первое", "'Второе'", "'Третье'", "'Четвертое']"]

А затем обрезать ненужные символы с обоих концов элемента с помощью метода strip().
В результате получим список из элементов, без лишних символов, к которым можно обращаться по номеру.
Все это делается одной строкой кода — list comprehension.
Пример кода:

string = "['Первое, 'Второе', 'Третье', 'Четвертое']" res = [element.strip("'[]") for element in string.split(", ")] print(res[1])

В ответ выдаст:
Второе
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

laviol

Кодер-разнорабочий

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

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +2 ещё

Не получается сохранить код в PyCharm,?

  • 1 подписчик
  • час назад
  • 30 просмотров

Разбиение строки на список символов в Python

Часто в программировании возникает необходимость разбить строку на отдельные символы. Например, имеется строка «Привет, мир!». Целью может быть получение списка, содержащего все символы данной строки, то есть [‘П’, ‘р’, ‘и’, ‘в’, ‘е’, ‘т’, ‘,’, ‘ ‘, ‘м’, ‘и’, ‘р’, ‘!’].

Однако, при попытке использовать метод str.split() для достижения этой цели, результатом будет не список символов, а список слов. Этот метод разделяет строку на слова, используя пробелы в качестве разделителя.

text = "Привет, мир!" print(text.split()) # Результат: ['Привет,', 'мир!']

Это не то, что нужно в данном случае.

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

text = "Привет, мир!" print(list(text)) # Результат: ['П', 'р', 'и', 'в', 'е', 'т', ',', ' ', 'м', 'и', 'р', '!']

Альтернативный способ — использовать list comprehension, или генератор списков. Это позволяет более тонко контролировать процесс разбиения строки на символы.

text = "Привет, мир!" print([char for char in text]) # Результат: ['П', 'р', 'и', 'в', 'е', 'т', ',', ' ', 'м', 'и', 'р', '!']

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

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

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