Удаление элементов из Множества 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Удаление элементов из Множества



Имеется несколько способов удаления элементов из существующего множества:

· метод discard() принимает в качестве аргумента одиночное значение и удаляет это значение из множества, если этого значения в множестве нет, то ничего не произойдет:

>>> a_set.discard(2)
>>> a_set
{1, 3, 4, 'b', 'c', 'a'};

· метод remove() также принимает в качестве аргумента одиночное значение, и также удаляет его из множества, но в отличие от метода discard(), если в множестве нет элемента, то будет выработано исключение KeyError:

>>> a_set.remove('a')
{1, 3, 4, 'c', 'b'},
>>> a_set.remove('a')
>>> KeyError: 'a';

· метод pop() удаляет из множества первый элемент и возвращает его значение:

>>> a_set.pop()
1
>>> a_set
{3, 4, 'c', 'b'},
если множество пусто – обозначается set(), то вырабатывается исключение:

KeyError: 'pop from an empty set'

С помощью метода pop() можно просмотреть все элементы множества:

>>> while a_set:
print (a_set.pop())
3
4
b
c;

· метод clear() удаляет все элементы множества, создавая пустое множество:

>>> a_set.clear()
>>> a_set
set().

В логическом контексте пустое множество set() соответствует False, любое другое – True.
Отметим, что объекты типа frozenset, будучи неизменяемыми множествами, не имеют методов удаления элементов из множества.

Оглавление

Сравнение и копирование множеств

Python имеет несколько методов сравнения множеств:

· метод isdisjoint() принимает в качестве аргумента другое множество и возвращает значение True, если множенства не имеют общих элементов:

>>> a_set={1,2,5,6}
>>> a_set.isdisjoint({3,7})
True,
>>> a_set.isdisjoint({2,7})
False;

· метод issubset() принимает в качестве аргумента другое множество и возвращает значение True, если каждый элемент данного множества содержится в другом множестве:

>>> a_set.issubset({1,2,3,3,5,6})
True;

· метод issuperset() принимает в качестве аргумента другое множество и возвращает значение True, если каждый элемент другого множества содержится в данном множестве:

>>> a_set.issuperset({1,6})
True.

Метод copy() используется для "поверхностного" копирования списков (см. раздел 4)):

>>> b_set=a_set.copy()
>>> b_set
{1, 2, 5, 6}.

Оглавление

Операции над множествами

Python имеет несколько методов для выполнения основных операций над множествами:

· метод union() (объединение) возвращает новое множество, содержащее все элементы каждого из множеств:

>>> a_set={1,2,5,6,9}
>>> b_set={2,4,6,8}
>>> a_set.union(b_set)
{1, 2, 4, 5, 6, 8, 9},

метод симметричен, т.е. a_set.union(b_set)=b_set.union(a_set):

>>> b_set.union(a_set)
{1, 2, 4, 5, 6, 8, 9};

· метод intersection() (пересечение) возвращает новое множество, содержащее все элементы, которые есть и в первом множестве, и во втором:

>>> a_set.intersection(b_set)
{2, 6},

метод симметричен;

· метод difference() (разность) возвращает новое множество, содержащее все элементы, которые есть в множестве a_set, но которых нет в множестве b_set:

>>> a_set.difference(b_set)
{9, 5, 1},

этот метод не симметричен, поскольку a_set.difference(b_set) не равно b_set.difference(a_set):

>>> b_set.difference(a_set)
{8, 4};

· метод symmetric_difference() (симметрическая разность) возвращает новое множество, которое содержит только уникальные элементы обоих множеств:

>>> a_set.symmetric_difference(b_set)
{1, 4, 5, 8, 9},

метод симметричен.

Оглавление

Словари

Словари в языке Python имеют тип (класс) dict и представляют собой множество пар вида ключ:значение. Словари в языке Python похожи на ассоциативные массивы языка Jaxascript.

Оглавление

Создание словарей

Для создания словаря в виде литерала необходимо поместить его элементы, заданные в виде пар ключ:значение и разделеные запятыми, в фигурные скобки:

>>> a_dict={ 'alpha':1, 'beta':2, 'gamma':3}
>>> a_dict
{'alpha': 1, 'beta': 2, 'gamma': 3}

В качестве ключа необходимо использовать только неизменяемые (хэшируемые) типы: числа (целые и с плавающей точкой), строки, логические значения, кортежи, диапазоны и неизменяемые множества. В качестве значения могут быть заданы любые из рассмотренных типов, включая изменяемые множества и словари.
Словари также можно задавать с помощью конструктора – встроенной функции dict() (см. подраздел 8.1 лаб. раб. №1). Если при вызове функция не имеет аргументов, то создается пустой список:

>>> dict ()
{},

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

· именованные аргументы, которые указываются в виде пар "имя=значение" (см. подраздел 1.1.2 лаб. раб. №6):

>>> b_dict= dict (alpha=1, beta=2, gamma=3);

· аргумент, имеющий тип словаря:

>>> c_dict= dict ({ 'gamma':3, 'alpha':1, 'beta':2});

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

>>> d_dict= dict ([('alpha',1), ('beta',2), ('gamma',3)])

Выше четырьмя разными способами были созданы словари a_dict(), b_dict(), c_dict() и d_dict(), имеющие одно и то же значение. Проверим это:

>>> a_dict==b_dict==c_dict==d_dict
True.

Если ключи и значения словаря заданы последовательностями, то для создания словаря также можно использовать встроенную функцию zip(*iterable) (см. подраздел 8.1 лаб. раб. №1), которая возвращает итератор, элементами которого являются кортежи, где i-й кортеж содержит i-е элементы каждого аргумента последовательностей или итерабельных объектов. Если последовательности, явдяющиеся аргументами функции, имеют разную длину, то формируемые кортежи имеют число элементов, равное длине минимальной последовательности. Если указан один элемент – функция возвращает итератор, состоящий из одноэлементных кортежей. Если аргументы не указаны – возвращается пустой итератор.
Пусть, например, ключи словаря представлены списком key_list, а значения – кортежом value_tuple:

>>> key_list=[ 'a', 'b', 'c' ]
>>> value_tuple=(1.32, 'value', [1,2,3], 25)

Теперь с помощью функции zip(), аргументами которой являются последовательности key_list и value_tuple, создаем итератор с именем zipped:

>>> zipped= zip (key_list, value_tuple),

который имеет тип zip:

>>> type (zipped)
<class 'zip'>

Остается только преобразовать его с помощью конструктора в словарь:

>>> e_dict= dict (zipped)
>>> e_dict
{'a': 1.32, 'b': 'value', 'c': [1, 2, 3]}

Следует сказать, что словари в настоящее время являются единственными представителями ABC-класса Mapping, объекты которого ставят в соответсвие неизменяемые значения произвольным объектам. Являются изменяемыми контейнерами типа Mapping:

>>> import collections
>>> isinstance ({1: 'a',2: 'b',3: 'c' },collections.Container)
True
>>> isinstance ({1: 'a',2: 'b',3: 'c' },collections.Mapping)
True
>>> isinstance ({1: 'a',2: 'b',3: 'c' },collections.MutableMapping)
True

Для получения значения словаря по ключу нобходимо воспользоваться выражением:

>>> a_dict[ 'beta' ]
2,

если указанный ключ отсутствует – возбуждается исключение KeyError:

>>> a_dict[ 'delta' ]
KeyError: 'delta'.

Чтобы получить все значения словаря следует использовать оператор for in:

>>> for key in a_dict:
print (key, '=',a_dict[key])
alpha = 1
beta = 2
gamma = 3

Можно изменять значение ключа:

>>> a_dict[ 'alpha' ]=11
>>> a_dict
{'alpha': 11, 'beta': 2, 'gamma': 3}

и добавлять новые пары в словарь:

>>> a_dict[ 'epsilon' ]=5
>>> a_dict
{'alpha': 22, 'beta': 2, 'gamma': 3, 'epsilon': 5}

Для удаления ключа необходимо указать:

>>> del a_dict[ 'alpha' ]
>>> ]
{'beta': 2, 'gamma': 3, 'epsilon': 5}.

Словари так же, как последовательности и множества поддерживают функцию определения числа элементов len() и оператор in, позволяющий определить принадлежность элемента контейнеру.
Пустой словарь – {} в логическом контексте равен False, все остальные словари – True.

Оглавление

Методы словарей

Словари поддерживают следующие методы:

· clear() – очищает словарь, возвращая значение {}:

>>> b_dict={1:101, 2:102, 3:103}
>>> b_dict.clear()
>>> a_dict
{}.

Метод clear() поддерживается всеми изменяемыми классами данных;

· copy() – возвращает ссылку на вновь созданный объект класса dict с теми же значениями (т.е. выполняет "поверхностное" копирование, см. раздел 4):

>>> b_dict=a_dict.copy()
>>> b_dict
{'beta': 2, 'gamma': 3, 'epsilon': 5}.

Метод copy() поддерживается всеми изменяемыми классами данных;

· get(key[, default]) – если словарь имеет ключ key, возращает его значение, если нет – возвращает значение, заданное вторым аргументом (значение по умолчанию):

>>> a_dict.get('gamma', 'new_key')
'gamma'
>>> a_dict.get('delta', 'new_key')
'new_key';

· items() – возвращает элементы словаря в виде пар (key, value):

>>> items=a_dict.items()
>>> items
dict_items([('epsilon', 5), ('beta', 2), ('gamma', 3)])

· keys() – возвращает все ключи словаря:

>>> a_dict.keys()
dict_keys(['beta', 'gamma', 'epsilon'])

· pop(key[, default) – если указанный ключ содержится в словаре, удаляет его из словаря и возвращает его значение, иначе возвращает значение по умолчанию. Если значение по умолчанию не указано и ключ не содержится в словаре, то возникает исключение KeyError:

>>> a_dict.pop('gamma')
3
>>> a_dict
{'beta': 2, 'delta': 4, 'epsilon': 5};

· popitem() – удаляет и возвращает произвольную пару вида (key, value) из словаря;

· setdefault(key[, default) – похож на метод get(), но если ключа нет в словаре – не только возвращает значение по умолчанию, но и устанавливает его:

>>> a_dict.setdefault('delta', 4)
4
>>> a_dict
{'beta': 2, 'delta': 4, 'epsilon': 5}

· update([dict2]) – возвращает слияние элементов данного словаря и словаря, заданного аргументом (аргумент может быть задан: в виде именованных аргументов, в виде итерабельного типа или в виде словаря (см. описание конструктора dict() в подразделе 2.1):

>>> b_dict={ 'figure': 'circle', 'color': 'green' }
>>> a_dict.update(b_dict)
>>> a_dict
{'beta': 2, 'figure': 'circle', 'delta': 4, 'color': 'green', 'epsilon': 5}

· values() – возвращает все значения словаря:

>>> a_dict.values
dict_values([2, 'circle', 4, 'green', 5]).

Оглавление

Генераторы

В литералах при создании списков, множеств и словарей помимо указания перечня их элементов (см. подразделы 2.1 лаб. раб. №3, 1.1 и 2.1) можно также указать генераторы элементов этих контейнеров.

Оглавление



Поделиться:


Последнее изменение этой страницы: 2021-11-27; просмотров: 135; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.15.15 (0.027 с.)