Индексы и срезы.

Сегодня мы поговорим об операциях взятия индекса и среза. Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.

Каждому символу в строке соответствует индексный номер, начиная с 0. При попытке доступа к несуществующему индексу возникает исключение IndexError. Например:

a = [1, 3, 8, 7]
a[0]
#выведет 1

a[3]
#выведет 7

a[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

В Python также поддерживаются отрицательные индексы, при этом нумерация идёт с конца, например:

a = [1, 3, 8, 7]
a[-1]
#выведет 7

a[-4]
#выведет 1

a[-5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Прямой доступ к строке

При использовании прямого доступа к строке, тогда нумерация начинается с нуля. Пример:

word = "привет"
print(word[1])

#выведет р

В качестве примера прямого доступа к элементам строки напишем программу доступа к случайному символу строки. Листинг:

import random

word = input("Введите слово: ")

max = len(word)
min = -len(word)

for i in range(10):
    position = random.randrange(min, max)
    print("word[", position, "] = ", word[position])
    
input()

Позиции с положительными и отрицательными номерами

Напомним, что позиция, то есть индекс строки, может быть как положительный, так и отрицательный.

Как уже было отмечено, нумерация начинается с 0, поэтому у первого символа строки будет индекс 0, у второго -1 и т.д.

Рассмотрим пример с положительными и отрицательными индексами:

word = input("Введите слово: ")

max = len(word)
min = -len(word)

for i in range(min,max,1):
    print("word[", i, "] = ", word[i])
    
input()

Пользователь вводит слово. Далее мы вычисляем минимум и максимум. Максимум равен длине введенного слова, минимум – отрицательной длине.

Вывод будет таким:


Индексы и срезы.

Неизменяемость строк

Все последовательности делятся на изменяемые и неизменяемые. Элементы неизменяемой последовательности можно модифицировать.

Элементы неизменяемой последовательности изменить нельзя. Строки в Python – это пример неизменяемой последовательности. Рассмотрим пример:

message = "Привет"
print(message)
# выведет: Привет

message = "Пока"
print(message)
# выведет: Пока

На первый взгляд кажется, что мы изменили строку, но на самом деле Python создал строку “Пока” и присвоил это значение переменной message.

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

message = "Hello"
print(message[1])
e
message[1] = "a"
Traceback (most recent call last):
  File "", line 1, in 
    message[1] = "a"
TypeError: 'str' object does not support item assignment

В данном примере мы создали строку message. Мы можем обратиться к message[1] и прочитать это значение. Но нельзя присвоить message[1] новое значение. Интерпретатор сообщает что тип str не поддерживает поэлементное назначение.

Срезы

Срез (slice) — это извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности. Есть три формы срезов.

Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i, при этом считая, что нумерация начинается с числа 0.

Исходя из вышесказанного если S=’Hello’, то S[0]==’H’, S[1]==’e’, S[2]==’l’, S[3]==’l’, S[4]==’o’.

Срез с двумя параметрами: S[a:b] возвращает подстроку из b-a символов, начиная с символа c индексом a, то есть до символа с индексом b, не включая его. Например, S[1:4]==’ell’, то же самое получится если написать S[-4:-1].

Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа. При использовании такой формы среза ошибки IndexError никогда не возникает.

Если задать срез с тремя параметрами S[a:b:d], то третий параметр задает шаг, то есть будут взяты символы с индексами a, a+d, a+2*d и т.д.

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

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

a = [1, 3, 8, 7]
a[1:3] = [0, 0, 0]
a
[1, 0, 0, 0, 7]
del a[:-3]
a
[0, 0, 7]

Демо-программа “Срезы”

Создадим небольшую программу для демонстрации “Срезов”. Листинг:

word = "Привет"
print("Демо-программа Срезы")
print("Введите начальный и конечный индексы для среза слова 'Привет'")

begin = None
while begin != "":
    begin = input("начальная позиция: ")
    if begin:
        begin = int(begin)
        end = int(input("Конечная позиция: "))
        print(word[begin:end])
        
input()

Первым делом мы присваиваем начальной позиции значение None. Данное ключевое слово в Python представляет пустое значение. Означает только одно – значение еще не присвоено.

В цикле пользователь вводит начальную и конечную позицию. Как и при индексировании, можно использовать отрицательные номера.

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

Вывод нашей программы:


Индексы и срезы.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Один ответ к “Индексы и срезы.”

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

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

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Связи между моделями.

Связи между моделями.

В нашем проекте есть одна модель под названием “Объявления”. В этой статье мы создадим новый класс модели “Rubric”, которая будет представлять рубрики объявлений. Допишем в

 
Параметры полей и моделей.

Параметры полей и моделей.

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей. Наша созданная модель представляется непонятной аббревиатурой “Bbs”,

 
Административный web-сайт Django.

Административный web-сайт Django.

Административный web-сайт предоставляет доступ ко всем моделям, объявленным во всех приложениях, что составляют проект. С помощью данной панели можно просматривать, добавлять, править и удалять записи,

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: