Разделение строки на список слов в Python
Часто при работе с текстовыми данными стоит задача разделить строку на отдельные слова. Например, есть строка «Привет, мир! Это мой первый код на Python». Цель — преобразовать эту строку в список, где каждое слово будет отдельным элементом: [«Привет,», «мир!», «Это», «мой», «первый», «код», «на», «Python»].
В языке программирования Python для разделения строки на слова используется встроенный метод split() . Он разделяет строку на подстроки на основе указанного разделителя. Если разделитель не указан, метод split() разделяет строку по пробелам.
Вот простой пример использования метода split() :
text = "Привет, мир! Это мой первый код на Python" words = text.split() print(words)
После выполнения этого кода будет выведен следующий результат:
['Привет,', 'мир!', 'Это', 'мой', 'первый', 'код', 'на', 'Python']
Важно отметить, что разделители (в данном случае пробелы) не включаются в полученный список.
Таким образом, метод split() позволяет легко и быстро разделить строку на отдельные слова и сохранить их в списке для дальнейшей обработки.
Как в Python разбить строку на символы
3 простых способа, которые можно использовать в работе и пет-проектах.


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

Дмитрий Зверев
Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.
А зачем, собственно, в Python разбивать строки на символы? Например, для того, чтобы проверять правильность пароля и почты клиента, когда он регистрируется в онлайн-сервисе.
Скажем, на нашем сайте есть требование: в пароле должны быть как минимум одна заглавная, одна строчная буква и одна цифра. Мы можем написать скрипт на Python, который проверяет каждый символ и выносит вердикт: верный пароль или нет.
Если вы ещё не знакомы с Python, советуем прочитать нашу статью, в которой мы рассказываем, как быстро и бесплатно изучить этот замечательный язык программирования.
Циклы for и while, или метод «в лоб»
Как работает: проходит по каждому символу в строке и добавляет его в отдельный список.
Самый примитивный способ поделить строку на символы — сделать это с помощью циклов. Выбираем нужные символы из строки и складываем в список.
Выглядит это так:
Генераторы списков — то же, что и for, но короче
Как работает: делает то же самое, что и цикл for, но записывается всего в одну строчку.
password = 'f#da94AAd' symbols = [symbol for symbol in password] print(symbols)
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']
Здесь мы использовали встроенную в Python возможность — list comprehension. Термин сложно перевести на русский, поэтому его называют генератором списков.
Суть простая — это обычный цикл for, который записывается в одну строчку. Чтобы понять, как он работает, перепишем код выше в виде обычного цикла for:
# symbols = [symbol for symbol in password] symbols = [] for symbol in password: symbols += symbol
В короткой записи мы указываем, из какого списка берём элементы — in password, как будем именовать текущий элемент — for symbol, и что делаем с самим элементом — просто сохранять в неизменном виде: symbol.
Генераторы списков позволяют записывать длинный цикл for в одну строку. Это полезно, когда не нужно сильно изменять данные, а нужно просто сохранить их.
Функция list — для самых продуктивных
Как работает: делает то же самое, что и циклы for и while, но сокращает количество строк кода.
Когда не хотим писать даже пару строк кода, но разложить строку на символы всё ещё нужно, на помощь приходит функция list. Она превращает набор элементов в список:
password = 'f#da94AAd' symbols = list(password) print(symbols)
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']
Получили такой же результат, но использовали всего одну строку кода. Очень неплохо.
Проверим работу функции проверки пароля:
if check_password(symbols): print('Пароль верный') else: print('Пароль неверный')
'Пароль верный'
Функция list — самая лаконичная. Чтобы получить список символов, из которых состоит строка, достаточно просто вызвать функцию со строкой в качестве аргумента.
Что запомнить
Выделим главные тезисы из статьи:
- использование циклов for и while — это самый простой, но не самый эффективный способ достать из строки все символы;
- генераторы списков — это удобная и короткая замена цикла for;
- применение функции list — самый короткий способ разбить строку на символы.
Читайте также:
- Словари в Python: что нужно знать и как пользоваться
- «Прошёл модуль курса и начал рассылать резюме»: музыкант, который стал питонистом
- Создаём первую игру на Python и Pygame
Разбить dict на строки python?

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

Это и так строки.
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Несколько раз перечитал вопрос, но так ничего и не понял.

Евгений Петряев @Gremlin92 Автор вопроса
Сергей Горностаев, Ivan Yakushenko, нужно получить массив b[0] =

Евгений Петряев, у тебя был словарь, который ты зачем то преобразовал в строку функцией str

Евгений Петряев @Gremlin92 Автор вопроса
Ivan Yakushenko, у меня код немного другой, я не в курсе как вам словарь задать в коде, поэтому написал в виде строк
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Евгений Петряев, преобразовать строковое представление словаря в словарь намного сложнее, чем освоить литералы.
Евгений Петряев, так в реальности эти значения (a[0], a[1]) — словарь или же строка в виде словаря? Разница значительная.

Алан Гибизов @phaggi Куратор тега Python
Сергей Горностаев, литералы, к сожалению, очень трудно найти новичку — только книга «Изучаем Python» М.Лутца помогла мне понять, что к чему. До этого полгода я рыл сеть, но нигде не было прям вот четко разъяснено; я не полностью понимал их суть, хотя чувствовал, что там всё глубже, чем кажется. Но даже в официальной документации непросто понять, что скобки — не просто скобки.

Алан Гибизов, много думать бывает вредно; литералы — просто представление данных, обычный термин, не нужно к нему относиться как-то особенно.

Алан Гибизов, вообще, довольно интересная темка. Написано «словарь», по итогу даны строки. Цель вопроса — разбить на строки. И вот казалось бы, или вопрос уже решен, или же нужно превратить этот список в словарь, чтоб уже потом его разделить на строки (судя по заданному вопросу)

Алан Гибизов @phaggi Куратор тега Python
Ivan Yakushenko, это вам «изнутри» кажется всё просто. Когда приходишь из VBA или Cpp в Python, кое-что совершенно не интуитивно. Само слово «литерал» по отношению к тем же скобкам не воспринимается как что-то, на что надо обратить внимание.
Ну и потом, литералы порой ведут себя не совсем так, как вроде бы заменяемые ими операторы или функции. Это становится более-менее понятно, когда вникаешь в объектную модель языка.
А на начальном уровне Python выглядит как бейсик из Spectrum, только со странным поведением скобок.

Алан Гибизов @phaggi Куратор тега Python
MinTnt, да что тут гадать? Пусть топикстартер поправит вопрос, приведёт реальный код, реальные входные данные и что ожидает на выходе. Тогда и поговорить можно.
Для начала преобразуй это в словарь:
import datetime d = eval(a[0]) #потом можно использовать например так ditems = d.items() #dict_items([('id', 1), ('nickname', 'bla'), ('email', 'bla@mail.ru'), ('password', '63a9f0ea7bb98050796b649e85481845'), ('reg_date', datetime.datetime(2018, 11, 13, 17, 27, 21)), ('ip', '127.0.0.1'), ('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0'), ('phone', '88000000000')])
Непонятно, какой . (глупый человек) запаковал данные в таком виде, что распарсить их можно только через небезопасный eval()? Неужели нельзя было использовать JSON?
Разбить dict на строки python?

3 раза прочитал и не понял что тебе сделать надо. Давай описывай нормально.
ggrn ★★★★★
( 11.01.21 10:31:20 MSK )
Hint: такого словаря не должно быть, а должна быть сериализуемая структура JSON.
vvn_black ★★★★★
( 11.01.21 10:33:18 MSK )
Ответ на: комментарий от ggrn 11.01.21 10:31:20 MSK

куски строки 1,3,5(id,nickname,…) и т.д. это индексы ассоциативного массива,2,4,6(1,bla. ) и т.д. это его значения, мне они и нужны
bad_master ★
( 11.01.21 10:34:01 MSK ) автор топика
Последнее исправление: bad_master 11.01.21 10:42:27 MSK (всего исправлений: 2)
Ответ на: комментарий от vvn_black 11.01.21 10:33:18 MSK

json выдает такую ошибку TypeError: Object of type datetime is not JSON serializable
bad_master ★
( 11.01.21 10:39:50 MSK ) автор топика
a=<> a[0] = x = str(a[0].get("id"))+' '+str(a[0].get("nickname")) print(x)
обрати внимание datetime.datetime(2018, 11, 13, 17, 27, 21) – это косяк, прям косяк косяк
Morin ★★★★
( 11.01.21 10:43:01 MSK )
Последнее исправление: Morin 11.01.21 10:43:57 MSK (всего исправлений: 1)
Ответ на: комментарий от Morin 11.01.21 10:43:01 MSK

bad_master ★
( 11.01.21 10:44:12 MSK ) автор топика
Ответ на: комментарий от bad_master 11.01.21 10:39:50 MSK

‘reg_date’: datetime.datetime(2018, 11, 13, 17, 27, 21),
Приведи datetime к строке, при помощи strftime(ТУТ НУЖНЫЙ ТЕБЕ ФОРМАТ)
ggrn ★★★★★
( 11.01.21 10:45:04 MSK )
Последнее исправление: ggrn 11.01.21 10:45:33 MSK (всего исправлений: 1)
>>> a = >>> ';'.join(map(str, a.values())) '1;2' >>> ";".join(map(str, a.keys())) 'a;b' >>> len(a) 2
crutch_master ★★★★★
( 11.01.21 10:46:12 MSK )
Последнее исправление: crutch_master 11.01.21 10:48:27 MSK (всего исправлений: 1)
Ответ на: комментарий от bad_master 11.01.21 10:28:32 MSK

a[0] = eval("")
AntonI ★★★★
( 11.01.21 11:08:40 MSK )
Ответ на: комментарий от crutch_master 11.01.21 10:46:12 MSK

а как потом перебирать в цикле этот join?
bad_master ★
( 11.01.21 11:12:44 MSK ) автор топика
Ответ на: комментарий от crutch_master 11.01.21 10:46:12 MSK

j = 0 i = 0 for row in a: words = ' '.join(map(str, a[j].values())) while i < len(a[0]): self.tableWidget.setItem(j, i, QTableWidgetItem(words)) i = i + 1 j = j + 1 i = 0
bad_master ★
( 11.01.21 11:19:15 MSK ) автор топика
Последнее исправление: bad_master 11.01.21 11:19:51 MSK (всего исправлений: 1)
Ответ на: комментарий от bad_master 11.01.21 11:12:44 MSK
А тебе надо было перебирать его в цикле? Ты хотел разбить, я его разбил. Описывай задачу полностью, я не хочу играть в бабку-угадку.
crutch_master ★★★★★
( 11.01.21 11:48:16 MSK )
Последнее исправление: crutch_master 11.01.21 11:53:45 MSK (всего исправлений: 3)

In [18]: data Out[18]: "" In [19]: entry = eval(data); type(entry) Out[19]: dict In [20]: entry Out[20]:
thunar ★★★★★
( 11.01.21 11:51:32 MSK )
Ответ на: комментарий от thunar 11.01.21 11:51:32 MSK
Да у него есть словарь скорее всего. Начале он просто выхлоп запостил.
crutch_master ★★★★★
( 11.01.21 11:52:52 MSK )
Ответ на: комментарий от crutch_master 11.01.21 11:52:52 MSK

Ну тогда всё таки нужно ждасть от ТСа чёткую формулировку задачи.
thunar ★★★★★
( 11.01.21 11:55:42 MSK )
Ответ на: комментарий от bad_master 11.01.21 11:19:15 MSK
//i = i + 1 i += 1 //while i < len(a[0]): Зачем len(a[0]) раз заводть в tableWidget список значений всех полей?
crutch_master ★★★★★
( 11.01.21 12:03:48 MSK )
Ответ на: комментарий от thunar 11.01.21 11:55:42 MSK
Ну тогда всё таки нужно ждасть от ТСа чёткую формулировку задачи.
Да. Я понял примерно, что он хочет, то тоже хочу это узнать он него, мухахахаха.
crutch_master ★★★★★
( 11.01.21 12:05:14 MSK )
Последнее исправление: crutch_master 11.01.21 12:05:45 MSK (всего исправлений: 1)
Ответ на: комментарий от crutch_master 11.01.21 12:05:14 MSK
он зачем-то хочет перебирать это в цикле, хотя все уже сделано для удобства в виде словаря, ну видимо так задачу поставили через жО
либо он читает задание через опять же жО (:
Morin ★★★★
( 11.01.21 12:14:36 MSK )
Ответ на: комментарий от crutch_master 11.01.21 11:48:16 MSK

Надо бы в self.tableWidget.setItem(j, i, QTableWidgetItem(words)) в каждую ячейку записать значения которые мы разбили в строку
bad_master ★
( 11.01.21 12:31:37 MSK ) автор топика
Ответ на: комментарий от bad_master 11.01.21 12:31:37 MSK
Все значения в каждую ячейку?
crutch_master ★★★★★
( 11.01.21 12:34:35 MSK )
Ответ на: комментарий от bad_master 11.01.21 12:31:37 MSK
блин, открой уже справку
на тебе итератор
for key, value in a[0].items(): print(value)
Morin ★★★★
( 11.01.21 12:42:04 MSK )
Ответ на: комментарий от crutch_master 11.01.21 12:34:35 MSK

bad_master ★
( 11.01.21 12:42:29 MSK ) автор топика
Ответ на: комментарий от bad_master 11.01.21 12:42:29 MSK
Т.к. нормальной формулировкой вы нас обделили, попробую угадать
t = for i, p in enumerate(t): print(i, p, t[p])
AKonia ★★
( 11.01.21 13:18:25 MSK )
Последнее исправление: AKonia 11.01.21 13:19:09 MSK (всего исправлений: 1)
Ответ на: комментарий от Norgat 11.01.21 10:24:37 MSK

X512 ★★★★★
( 11.01.21 13:22:51 MSK )
Ответ на: комментарий от AKonia 11.01.21 13:18:25 MSK

надо вот в таблицу занести каждый столбик и строку, у меня пока что получается все в каждую ячейку вписать, а хочу чтобы id в первый столбец, nickname во 2й, почта в третий, пароль в четвертый и т.д.
bad_master ★
( 11.01.21 13:29:13 MSK ) автор топика
Последнее исправление: bad_master 11.01.21 13:58:38 MSK (всего исправлений: 1)
Ответ на: комментарий от bad_master 11.01.21 13:29:13 MSK
А в чём проблема ? Неужели трудно из моего примера скормить значения в функцию установки значений виджетов ?
t = for i, p in enumerate(t): self.tableWidget.setItem(1, i+1, QTableWidgetItem(p)) self.tableWidget.setItem(2, i+1, QTableWidgetItem(t[p]))
Если подвох в том, что у вас не словарь, а массив из строк(внутри которых словарь), то сверху в цикле:
for t in [eval(tablized) for tablized in a]:
AKonia ★★
( 11.01.21 14:01:37 MSK )
Последнее исправление: AKonia 11.01.21 14:06:23 MSK (всего исправлений: 7)

Перестаньте кормить XY проблему
Goury ★★★★★
( 11.01.21 14:14:51 MSK )
Ответ на: комментарий от bad_master 11.01.21 12:42:29 MSK
Ну так твой код это и делает.
crutch_master ★★★★★
( 11.01.21 16:40:28 MSK )
Ответ на: комментарий от bad_master 11.01.21 13:29:13 MSK
надо вот в таблицу занести каждый столбик и строку, у меня пока что получается все в каждую ячейку вписать
Вооот. Почему это надо вытягивать из тебя терморектальным методом?
j = 0 for row in a: i = 0 for value in row.values(): self.tableWidget.setItem(j, i, QTableWidgetItem(value)) i += 1 j += 1
Кто-нибудь этот кусок может лучше переписать? Решил выучить пистон, как берусь, каждый раз блевануть охота.
crutch_master ★★★★★
( 11.01.21 16:46:42 MSK )
Ответ на: комментарий от crutch_master 11.01.21 16:46:42 MSK
там смешнее будет, когда в словаре будет пропущен кей, ибо нулевой ибо в его не заполнили 🙂
но кто мы чтоб судить, правда?
Morin ★★★★
( 11.01.21 16:50:15 MSK )
Ответ на: комментарий от Morin 11.01.21 16:50:15 MSK
там смешнее будет, когда в словаре будет пропущен кей
но кто мы чтоб судить, правда?
Ну сделай nullcheck как надо. Я правда хз, как на этой херне надо писать.
crutch_master ★★★★★
( 11.01.21 16:59:05 MSK )
Ответ на: комментарий от Morin 11.01.21 16:50:15 MSK

Выше же метод get() советовали. Как раз для такого.
Shadow ★★★★★
( 11.01.21 17:05:17 MSK )
Ответ на: комментарий от Shadow 11.01.21 17:05:17 MSK
на никнейм погляди 🙂
не ну как задачу описали, так и отвечаем))) это я просто к граблям присматриваюсь, а их можно еще накопать
Morin ★★★★
( 11.01.21 17:14:54 MSK )
Ответ на: комментарий от crutch_master 11.01.21 16:59:05 MSK
хз из чего портянка словарей составлена.
На мой взгляд словарь как раз чтоб не париться, если один из ключей не указан, то его просто не будет в словаре. если тупо перебираем элементы без ключей, то столбцы поедут
конечно это все догадки, что кто-то не хотел фиксированный формат словаря
Morin ★★★★
( 11.01.21 17:17:43 MSK )
Ответ на: комментарий от crutch_master 11.01.21 16:46:42 MSK

QTableWidgetItem(QTableWidgetItem): argument 1 has unexpected type ‘datetime.datetime’
bad_master ★
( 11.01.21 17:18:24 MSK ) автор топика
Ответ на: комментарий от bad_master 11.01.21 17:18:24 MSK
тебя уже в это выше тыкали
Morin ★★★★
( 11.01.21 17:20:53 MSK )
Ответ на: комментарий от bad_master 11.01.21 17:18:24 MSK
str(value). Всё за тебя делать? И думать, и код писать? Может я з/п еще за тебя получать буду?
crutch_master ★★★★★
( 11.01.21 18:06:27 MSK )
Последнее исправление: crutch_master 11.01.21 18:07:08 MSK (всего исправлений: 1)
Ответ на: комментарий от crutch_master 11.01.21 18:06:27 MSK

Я новичок, это пишу свою первую программу. Нет зп, буду книгу читать чтобы хоть что-то знать. Если работает то всех благодарю
bad_master ★
( 11.01.21 19:10:00 MSK ) автор топика
Ответ на: комментарий от crutch_master 11.01.21 16:46:42 MSK

Вместо внешних i, j кошернее завернуть в enumerate.
thunar ★★★★★
( 11.01.21 19:46:12 MSK )
Ответ на: комментарий от Norgat 11.01.21 10:24:37 MSK
WitcherGeralt ★★
( 11.01.21 19:49:12 MSK )
Ответ на: комментарий от bad_master 11.01.21 10:39:50 MSK
Так добавь сериализацию дейттайма, проблема-то.
WitcherGeralt ★★
( 11.01.21 19:50:39 MSK )
Ответ на: комментарий от crutch_master 11.01.21 16:46:42 MSK
UPD. Тебе выше даже показали уже.
WitcherGeralt ★★
( 11.01.21 20:11:05 MSK )
Последнее исправление: WitcherGeralt 11.01.21 20:12:06 MSK (всего исправлений: 1)
Ответ на: комментарий от bad_master 11.01.21 10:39:50 MSK

И тем не менее это json. Точнее, json рукожопа. В отличие от json здорового человека, перепутаны кавычки (должны быть двойные) и, как заметил Morin, грубый косяк с datetime
Нужно вломить коллеге, который написал экспорт, а не пытаться изобрести гнутый молоток
router ★★★★★
( 12.01.21 02:45:07 MSK )
Ответ на: комментарий от bad_master 11.01.21 19:10:00 MSK

Лучше давай всю задачу прямо с примера в виде файла с поступающими данными (сами данные можешь заменить на имярек1 имярек2 и так далее, но дать полный минимальный пример) как есть и нормально обсудим как её правильно решать, потому что то что я увидел в треде (не только от тебя но и в виде советов) ужасно настолько, что у меня волосы дыбом встали.
Как выше упомянули коллеге надо вломить по рукам за создание велосипедов.
Самый ужас от твоей формулировки:
Вот от этого прямо кровь из глаз.
peregrine ★★★★★
( 12.01.21 03:31:04 MSK )
Последнее исправление: peregrine 12.01.21 03:35:53 MSK (всего исправлений: 2)