Как в Python разбить строку на символы
3 простых способа, которые можно использовать в работе и пет-проектах.


Иллюстрация: Оля Ежак для Skillbox Media
А зачем, собственно, в Python разбивать строки на символы? Например, для того, чтобы проверять правильность пароля и почты клиента, когда он регистрируется в онлайн-сервисе.
Скажем, на нашем сайте есть требование: в пароле должны быть как минимум одна заглавная, одна строчная буква и одна цифра. Мы можем написать скрипт на Python, который проверяет каждый символ и выносит вердикт: верный пароль или нет.
Если вы ещё не знакомы с Python, советуем прочитать нашу статью, в которой мы рассказываем, как быстро и бесплатно изучить этот замечательный язык программирования.
Циклы for и while, или метод «в лоб»
Как работает: проходит по каждому символу в строке и добавляет его в отдельный список.
Самый примитивный способ поделить строку на символы — сделать это с помощью циклов. Выбираем нужные символы из строки и складываем в список.
Выглядит это так:
password = 'f#da94AAd'
symbols = []
for symbol in password:
symbols += symbol
print(symbols)
Результат:
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']
Перед тем как разбить строку, мы подготовили пустой список symbols, в который на каждой итерации цикла помещали по символу из строки password. В symbols попало всё — буквы, цифры и прочие знаки.
Теперь, чтобы понять, корректен ли пароль, напишем функцию, которая будет это проверять:
def check_password(password):
has_lowercase = any(char.islower() for symbol in password)
has_uppercase = any(char.isupper() for symbol in password)
has_digit = any(char.isdigit() for symbol in password)
if has_lowercase and has_uppercase and has_digit:
return True
else:
return False
Проверим работу функции:
if check_password(symbols):
print('Пароль верный')
else:
print('Пароль неверный')
Результат:
'Пароль верный'
Цикл for легко превращается в цикл while. Для этого нужно ввести дополнительную переменную-счётчик:
symbols = []
index = 0
while index < len(password):
symbols.append(password[index])
index += 1
print(symbols)
Результат тот же:
['f', '#', 'd', 'a', '9', '4', 'A', 'A', 'd']
Переменная index следит за тем, когда закончится строка. Если её значение больше или равно длине строки, то нам нужно прекращать цикл: все символы уже добавлены.
Функция проверки пароля по-прежнему работает:
if check_password(symbols):
print('Пароль верный')
else:
print('Пароль неверный')
Результат:
'Пароль верный'
? Циклы 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 — самый короткий способ разбить строку на символы.