Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 113

... ('Moe', 'A wise guy, huh?'),

... ('Larry', 'Ow!'),

... ('Curly', 'Nyuk nyuk!'),

... ])

>>>

>>> for stooge in quotes:

... print(stooge)

...

Moe

Larry

Curly

Стек + очередь == deque

deque (произносится как «дэк») — это двухсторонняя очередь, которая имеет воз-

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

элементы с любого конца последовательности. В следующем примере мы будем

двигаться с обоих концов слова к его середине, чтобы увидеть, является ли оно

палиндромом. Функция popleft() удаляет крайний слева элемент deque и возвра-

щает его, функция pop() удаляет крайний справа элемент и возвращает его. Вместе

они двигаются с концов слова к его середине. Работа будет продолжаться до тех

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

>>> def palindrome(word):

... from collections import deque

... dq = deque(word)

... while len(dq) > 1:

Стандартная библиотека Python

153

... if dq.popleft() != dq.pop():

... return False

... return True

...

...

>>> palindrome('a')

True

>>> palindrome('racecar')

True

>>> palindrome('')

True

>>> palindrome('radar')

True

>>> palindrome('halibut')

False

Я воспользовался этим примером, чтобы было проще проиллюстрировать ра-

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

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

наизнанку. В Python строковой функции reverse() не существует, но можно об-

ратить строку с помощью разбиения, как показано здесь:

>>> def another_palindrome(word):

... return word == word[::-1]

...

>>> another_palindrome('radar')