Функции множеств Python

funkcii mnozhestv python Структуры данных

Как и прежде, начнем с основанного на функциях менеджера множеств. Но на этот раз вместо управления совместно используемым объектом множества в модуле определим функции, реализующие операции множеств над передаваемыми им последовательностями Python (пример 18.8).

Пример 18.8. PP4E\Dstruct\Basic\inter.py

"операции множеств над двумя последовательностями"

def intersect(seq1, seq2):

res = []

for x in seq1:

if x in seq2:

res.append(x)

return res

# начать с пустого списка

#

#

просмотр первой последовательности

добавить общие элементы в

конец

def union(seq1, seq2): res = list(seq1)

#

создать копию seq1

 

for x in seq2:

if not x in res:

res.append(x)

return res

#

добавить новые элементы в

seq2

 

Эти функции работают с последовательностями любого типа — списками, строками, кортежами и другими итерируемыми объектами, удовлетворяющими протоколам, предполагаемым этими функциями (циклы for, проверки принадлежности in). На самом деле их можно использовать даже с объектами разных типов: последние две команды в следующем фрагменте вычисляют пересечение и объединение списка и кортежа. Как обычно в Python, значение имеет ин тер фейс объекта, а не конкретный тип:

C:\\PP4E\Dstruct\Basic> python

>  >> from inter import *

>  >> s1 = "SPAM"

>  >> s2 = "SCAM"

>  >> intersect(s1, s2), union(s1, s2)

([‘S’, ‘A’, ‘M’], [‘S’, ‘P’, ‘A’, ‘M’, ‘C’])

>  >> intersect([1,2,3], (1,4))

[1]

>  >> union([1,2,3], (1,4))

[1, 2, 3, 4]

Обратите внимание, что результат здесь всегда является списком независимо от типов передаваемых последовательностей. Мы могли бы обойти это ограничение путем преобразования типов или используя класс (что мы и сделаем чуть ниже). Но преобразования типов становятся неясными, если операнды имеют разные типы. В какой тип нужно преобразовывать?

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий