Код
#статьи

Как в 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 — самый короткий способ разбить строку на символы.
Онлайн-школа для детей Skillbox Kids
Учим детей программированию, созданию игр, сайтов и дизайну. Первое занятие бесплатно! Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована