... ('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')