×
Traktatov.net » Язык программирования Python » Читать онлайн
Страница 8 из 141 Настройки
Некоторые методы для работы с последовательностями

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

МетодОписание
>append(x)Добавляет элемент в конец последовательности
>count(x)Считает количество элементов, равных >x
>extend(s)Добавляет к концу последовательности >последовательность
>index(x)Возвращает наименьшее >i, такое, что >s[i] == x. Возбуждает исключение >ValueError, если >x не найден в >s
>insert(i, x)Вставляет элемент >x в >i–й промежуток
>pop(i)Возвращает >i–й элемент, удаляя его из последовательности
>reverse()Меняет порядок элементов >s на обратный
>sort([cmpfunc])Сортирует элементы >s. Может быть указана своя функция сравнения >cmpfunc
Взятие элемента по индексу и срезы

Здесь же следует сказать несколько слов об индексировании последовательностей и выделении подстрок (и вообще — подпоследовательностей) по индексам. Для получения отдельного элемента последовательности используются квадратные скобки, в которых стоит выражение, дающее индекс. Индексы последовательностей в Python начинаются с нуля. Отрицательные индексы служат для отсчета элементов с конца последовательности (>-1 — последний элемент). Пример проясняет дело:

>>>> s = [0, 1, 2, 3, 4]

>>>> print s[0], s[-1], s[3]

>0 4 3

>>>> s[2] = -2

>>>> print s

>[0, 1, -2, 3, 4]

>>>> del s[2]

>>>> print s

>[0, 1, 3, 4]

Примечание:

Удалять элементы можно только из изменчивых последовательностей и желательно не делать этого внутри цикла по последовательности.

Несколько интереснее обстоят дела со срезами. Дело в том, что в Python при взятии среза последовательности принято нумеровать не элементы, а промежутки между ними. Поначалу это кажется необычным, тем не менее, очень удобно для указания произвольных срезов. Перед нулевым (по индексу) элементом последовательности промежуток имеет номер 0, после него — 1 и т.д.. Отрицательные значения отсчитывают промежутки с конца строки. Для записи срезов используется следующий синтаксис:

>последовательность[нач:кон:шаг]

где >нач — промежуток начала среза, >кон — конца среза, >шаг — шаг. По умолчанию >нач=0, >кон=len(последовательность), >шаг=1, если >шаг не указан, второе двоеточие можно опустить.

А теперь пример работы со срезами:

>>>> s = range(10)

>>>> s

>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>> s[0:3]

>[0, 1, 2]

>>>> s[-1:]

>[9]

>>>> s[::3]

>[0, 3, 6, 9]

>>>> s[0:0] = [-1, -1, -1]

>>>> s

>[-1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>> del s[:3]

>>>> s

>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

Тип dict

Словарь (хэш, ассоциативный массив) — это изменчивая структура данных для хранения пар ключ–значение, где значение однозначно определяется ключом. В качестве ключа может выступать неизменчивый тип данных (число, строка, кортеж и т.п.). Порядок пар ключ–значение произволен. Ниже приведен литерал для словаря и пример работы со словарем:

>d = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>d0 = {0: 'zero'}

>print d[1] # берется значение по ключу

>d[0] = 0   # присваивается значение по ключу