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

Как перебирать символы в строке python

  • автор:

Строки

Строка представляет последовательность символов в кодировке Unicode, заключенных в кавычки. Причем для определения строк Python позволяет использовать как одинарные, так и двойные кавычики:

message = "Hello World!" print(message) # Hello World! name = 'Tom' print(name) # Tom

Если строка длинная, ее можно разбить на части и разместить их на разных строках кода. В этом случае вся строка заключается в круглые скобки, а ее отдельные части — в кавычки:

text = ("Laudate omnes gentes laudate " "Magnificat in secula ") print(text)

Если же мы хотим определить многострочный текст, то такой текст заключается в тройные двойные или одинарные кавычки:

''' Это комментарий ''' text = '''Laudate omnes gentes laudate Magnificat in secula Et anima mea laudate Magnificat in secula ''' print(text)

При использовани тройных одинарных кавычек не стоит путать их с комментариями: если текст в тройных одинарных кавычках присваивается переменной, то это строка, а не комментарий.

Управляющие последовательности в строке

Строка может содержать ряд специальных символов — управляющих последовательностей или escape-последовательности. Некоторые из них:

  • \ : позволяет добавить внутрь строки слеш
  • \’ : позволяет добавить внутрь строки одинарную кавычку
  • \» : позволяет добавить внутрь строки двойную кавычку
  • \n : осуществляет переход на новую строку
  • \t : добавляет табуляцию (4 отступа)

Используем некоторые последовательностей:

text = "Message:\n\"Hello World\"" print(text)

Консольный вывод программы:

Message: "Hello World"

Хотя подобные последовательности могут нам помочь в некоторых делах, например, поместить в строку кавычку, сделать табуляцию, перенос на другую строку. Но они также могут и мешать. Например:

path = "C:\python\name.txt" print(path)

Здесь переменная path содержит некоторый путь к файлу. Однако внутри строки встречаются символы «\n», которые будут интерпретированы как управляющая последовательность. Так, мы получим следующий консольный вывод:

C:\python ame.txt

Чтобы избежать подобной ситуации, перед строкой ставится символ r

path = r"C:\python\name.txt" print(path)

Вставка значений в строку

Python позволяет встравивать в строку значения других переменных. Для этого внутри строки переменные размещаются в фигурных скобках <>, а перед всей строкой ставится символ f :

userName = "Tom" userAge = 37 user = f"name: age: " print(user) # name: Tom age: 37

В данном случае на место будет вставляться значение переменной userName. Аналогично на вместо будет вставляться значение переменной userAge.

Обращение к символам строки

И мы можем обратиться к отдельным символам строки по индексу в квадратных скобках:

string = "hello world" c0 = string[0] # h print(c0) c6 = string[6] # w print(c6) c11 = string[11] # ошибка IndexError: string index out of range print(c11)

Индексация начинается с нуля, поэтому первый символ строки будет иметь индекс 0. А если мы попытаемся обратиться к индексу, которого нет в строке, то мы получим исключение IndexError. Например, в случае выше длина строки 11 символов, поэтому ее символы будут иметь индексы от 0 до 10.

Чтобы получить доступ к символам, начиная с конца строки, можно использовать отрицательные индексы. Так, индекс -1 будет представлять последний символ, а -2 — предпоследний символ и так далее:

string = "hello world" c1 = string[-1] # d print(c1) c5 = string[-5] # w print(c5)

При работе с символами следует учитывать, что строка — это неизменяемый (immutable) тип, поэтому если мы попробуем изменить какой-то отдельный символ строки, то мы получим ошибку, как в следующем случае:

string = "hello world" string[1] = "R"

Мы можем только полностью переустановить значение строки, присвоив ей другое значение.

Перебор строки

С помощью цикла for можно перебрать все символы строки:

string = "hello world" for char in string: print(char)

Получение подстроки

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

  • string[:end] : извлекается последовательность символов начиная с 0-го индекса по индекс end (не включая)
  • string[start:end] : извлекается последовательность символов начиная с индекса start по индекс end (не включая)
  • string[start:end:step] : извлекается последовательность символов начиная с индекса start по индекс end (не включая) через шаг step
string = "hello world" # с 0 до 5 индекса sub_string1 = string[:5] print(sub_string1) # hello # со 2 до 5 индекса sub_string2 = string[2:5] print(sub_string2) # llo # с 2 по 9 индекса через один символ sub_string3 = string[2:9:2] print(sub_string3) # lowr

Объединение строк

Одной из самых распространенных операций со строками является их объединение или конкатенация. Для объединения строк применяется операция сложения:

name = "Tom" surname = "Smith" fullname = name + " " + surname print(fullname) # Tom Smith

С объединением двух строк все просто, но что, если нам надо сложить строку и число? В этом случае необходимо привести число к строке с помощью функции str() :

name = "Tom" age = 33 info = "Name: " + name + " Age: " + str(age) print(info) # Name: Tom Age: 33

Повторение строки

Для повторения строки определенное количество раз применяется операция умножения:

print("a" * 3) # aaa print("he" * 4) # hehehehe

Сравнение строк

Особо следует сказать о сравнении строк. При сравнении строк принимается во внимание символы и их регистр. Так, цифровой символ условно меньше, чем любой алфавитный символ. Алфавитный символ в верхнем регистре условно меньше, чем алфавитные символы в нижнем регистре. Например:

str1 = "1a" str2 = "aa" str3 = "Aa" print(str1 > str2) # False, так как первый символ в str1 - цифра print(str2 > str3) # True, так как первый символ в str2 - в нижнем регистре

Поэтому строка «1a» условно меньше, чем строка «aa». Вначале сравнение идет по первому символу. Если начальные символы обоих строк представляют цифры, то меньшей считается меньшая цифра, например, «1a» меньше, чем «2a». Если начальные символы представляют алфавитные символы в одном и том же регистре, то смотрят по алфавиту. Так, «aa» меньше, чем «ba», а «ba» меньше, чем «ca». Если первые символы одинаковые, в расчет берутся вторые символы при их наличии. Зависимость от регистра не всегда желательна, так как по сути мы имеем дело с одинаковыми строками. В этом случае перед сравнением мы можем привести обе строки к одному из регистров. Функция lower() приводит строку к нижнему регистру, а функция upper() — к верхнему.

str1 = "Tom" str2 = "tom" print(str1 == str2) # False - строки не равны print(str1.lower() == str2.lower()) # True

Функции ord и len

Поскольку строка содержит символы Unicode, то с помощью функции ord() мы можем получить числовое значение для символа в кодировке Unicode:

print(ord("A")) # 65

Для получения длины строки можно использовать функцию len() :

string = "hello world" length = len(string) print(length) # 11

Поиск в строке

С помощью выражения term in string можно найти подстроку term в строке string. Если подстрока найдена, то выражение вернет значение True , иначе возвращается значение False :

string = "hello world" exist = "hello" in string print(exist) # True exist = "sword" in string print(exist) # False

Как переставить символы в строке и вернуть все варианты?

Есть строка «робот» и необходимо перебрать все варианты слова начиная с 0 индекса и до последнего и вернуть все варианты:
[«робот»,
«оботр»,
«ботро»,
«отроб»,
«тробо»]
Я делаю так m = (string + string[:1]) и получаю первый вариант «оботр», а как это зациклить и получить все варианты не понимаю.

  • Вопрос задан более года назад
  • 197 просмотров

Комментировать

Решения вопроса 1

karabanov

Системный администратор

Надо добавить цикл:

string = "робот" for i in string: print(string) string = string[1:] + string[:1]
string = "робот" [string[i:] + string[:i] for i in range(len(string))]

Ответ написан более года назад

Python: Обход строк

С помощью циклов не только обрабатывают числа, но работают и со строками. Например, можно получить конкретный символ по его индексу, а также формировать строки в циклах.

Ниже пример кода, который печатает буквы каждого слова на отдельной строке:

def print_name_by_symbol(name): i = 0 # Такая проверка будет выполняться до конца строки, # включая последний символ. Его индекс `length - 1`. while i < len(name): # Обращаемся к символу по индексу print(name[i]) i = i + 1 name = 'Arya' print_name_by_symbol(name) # =>'A' # => 'r' # => 'y' # => 'a' 

Главное в этом коде — поставить правильное условие в while . Это можно сделать двумя способами: i < len(name) или i

Задание

Реализуйте функцию print_reversed_word_by_symbol() , которая печатает переданное слово посимвольно, как в примере из теории, но делает это в обратном порядке.

word = 'Hexlet' print_reversed_word_by_symbol(word) # => 't' # => 'e' # => 'l' # => 'x' # => 'e' # => 'H' 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Работа со строками в Python

Человек – очень умное существо. Мы с вами умеем и читать, и писать.

Некоторые змеи, кстати, тоже. Не все, конечно, но Python – без проблем. У него для этого даже отдельный тип данных есть.

Определение строкового типа данных

Что такое строка в Python?
Строка — тип данных, хранящий в себе набор символов произвольной длины..

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

Также для более удобного создания и изменения строк мы можем использовать следующие способы:

  • сложение строк (конкатенация) — получение новой строки, состоящей из двух других путем их “склеивания”;
  • умножение строки на число — когда нам нужна строка из повторяющихся элементов, строку, состоящую из этого элемента, можно умножить на количество повторений;
  • любой другой тип данных можно перевести в строковой с помощью команды str().

Индексация

Индикация — это доступ к отдельным элементам чего-либо по индексу этого элемента — его порядкового номера. В Python индексация начинается с 0.

Каждый символ строки можно получить по индексу, указав после имени строки в квадратных скобках нужный индекс.

  • с помощью индекса можно, например, взять символ и записать его в отдельную переменную, но нельзя изменить;
  • индексы могут принимать и отрицательные значения. Это нужно для того, чтобы обращаться к символам строки не с начала, а с конца. Так, последний символ будет иметь индекс -1, у предпоследнего будет -2, у третьего с конца -3 и так далее.

Срез — это целая последовательность подряд идущих элементов, которую также можно достать с помощью индексов.

В квадратных скобках после имени строки указываются два значения через двоеточие — срезом будет последовательность символов, индексы границы которой — с первого значения включительно по второе не включительно.

Если какая-то из границ среза не указывается — программа будет считать началом среза начало или конец самой строки, если нет первого или последнего значения соответственно.

Основные строковые методы

Для упрощения работы со строками в Python есть достаточно много встроенных методов.

Какие есть встроенные функции для работы со строками?

  • len(s) — определяет длину строки s;
  • s.count(sub) — подсчитывает, сколько раз переданный элемент sub встречается в данной строке s;
  • s.split(sep) — делит строку s на части по разделителю sep. Если не указать разделитель, по умолчанию будет делить строку по пробелу. В качестве разделителя может быть указан любой символ или последовательность символов. Метод split создаст список, в котором будут части строки, разделенные по указанному значению.
  • s.replace(a, b, n) — возвращает измененное значение строки s, в которой элементы a заменены на b.

Последний параметр n является необязательным, если его не указать, то метод replace сразу поменяет все заменяемые значения а на b, какие только есть в строке. Если же его указать, то заменится ровно столько первых встретившихся элементов, сколько указано.

В том числе это удобный способ удаления чего-либо из строки, для этого в качестве аргумента b указываем пустую строку.

Перебор строк

Имея доступ к отдельным символам строки, мы имеем возможность их перебрать с помощью цикла for. И тут у нас есть два основных варианта:

  • Перебор по элементам. На каждом шаге цикла каждый новый элемент строки s будет записан в переменную i.

Такой подход удобен, когда нам не интересно взаимодействие соседних символов, так как к ним доступа у нас не будет. Но текущий символ мы можем проверить спокойно.

Например, из строки, состоящей из цифр, надо выписать только нечетные (у которых остаток от деления на 2 равен 1) — проверки отдельных элементов нам будет достаточно.

  • Перебор по индексам. Вариант реализации — с помощью диапазона range, в котором указана длина строки len(s). Тогда на каждом шаге цикла в переменную i будет записан индекс, по которому мы сможем обратиться к соответствующему элементу строки.

Такой вариант предпочтительнее, когда происходит что-то более интересное, и нам необходимо проверять или как-то использовать соседние символы, так как теперь у нас есть к ним доступ. Например, следующий за символом под индексом i будет иметь индекс i + 1, достать его не составит труда.

Для примера — из численной строки будем выводить пары соседних чисел, в которых они идут в порядке возрастания.

Последний пример очень интересен, так как без должной внимательности мы имеем возможность наткнуться на ошибку типа “IndexError: string index out of range” — выход за границы строки.

Чтобы этого избежать, необходимо внимательно следить за обращением к индексам и учитывать, что за их границы выходить нельзя.

Оператор in

Оператор in проверяет наличие символа или последовательности символов в строке. Если искомый элемент есть в строке, оператор возвращает значение True, в противном случае — False.

Мы уже замечали оператор in, когда записывали цикл for, а теперь, зная о нем больше, можем применять его и в условных конструкциях.

letter = "f" sub = “ppa” word = "Floppa" if letter in word: print("Буква", letter, "есть в слове", word) else: print("Буквы", letter, "нет в слове", word) if sub in word: print("Последовательность", sub, "есть в слове", word) else: print("Последовательности", sub, "нет в слове", word) Вывод: Буквы f нет в слове Floppa Последовательность “ppa” есть в слове Floppa 

Фактчек

  • Строка в Python — тип данных, хранящий в себе набор символов произвольной длины. Для создания строки используются двойные или одинарные кавычки.
  • Для обращения к отдельным символам строки используются индексы, для обращения к группе идущих подряд символов — срезы.
  • Для подсчета длины строки используется команда len, для подсчета вхождений элемента в строку — count, для разделения строки — split, для замены части строки — replace.
  • Если попытаться обратиться к индексу строки, которого не существует (например, к сотому элементу строки из 5 символов) — программа не заработает, выдавая ошибку типа IndexError.
  • Оператор in можно использовать для проверки нахождения элемента в строке.

Проверь себя

Задание 1.

Что может входить в состав строки?

  1. Буквы латинского алфавита
  2. Знаки препинания
  3. Числа
  4. Буквы русского алфавита
  5. Все вышеперечисленное
  6. Ничего из вышеперечисленного

Задание 2.

Результатом записи “100” + “2” * 4 будет…

  1. 108
  2. 10044
  3. 1002222
  4. Это некорректно записанное выражение, выдаст ошибку

Задание 3.

При исходной строке s = “111222” в результате записи s = s.replace(“2”, “1”, 2) строка примет вид…

Задание 4.

В строке s = “13579qet” срез s[3:] будет равен…

  1. Запись среза некорректна.
  2. 135
  3. 79qet
  4. 579qe

Задание 5.

Что означает вывод программы: “IndexError: string index out of range”?

  1. Компьютер сломался, придется покупать новый
  2. Строка содержит недопустимый символ, программа не может ее обработать
  3. Произошел выход за границы индексов строки
  4. Оператор in вернет это сообщение, если искомой последовательности нет в строке

Ответы: 1. — 5; 2. — 3; 3. — 1; 4. — 3; 5. — 3.

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

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