Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Добавление элементов к множествуСодержание книги
Поиск на нашем сайте ЛАБОРАТОРНАЯ РАБОТА №6 Тема: Множества. Словари. Генераторы Цель: Рассмотрение способов работы с множествами, словарями и генераторами ОГЛАВЛЕНИЕ 1 Множества Оглавление Множества Объекты множества в языке Python представляют собой неупорядоченные контейнеры (см. подраздел 1.1 лаб. раб. №3) уникальных хэшируемых объектов. >>> from collections import Hashable в то время как изменяемые контейнеры, такие как изменяемые множества (см. подраздел 1.1), словари (см. подраздел 2.1) и списки (см. раздел 2 лаб. раб. №3) – нет: >>> isinstance ([ 'a', 'b', 'c' ], Hashable Объекты, которые являются экземплярами созданных пользователем классов, являются хэшироваными по умолчанию, при сравнении между собой они не равны и значения их хэшей являются значениям их id(). Оглавление Создание множеств Создавать экземпляры изменяемого множества (тип set) можно с помощью литерала, поместив в фигурные скобки элементы множества неизменяемых типов, разделенные запятыми: >>> a_set={1,2, 'a', 'b' } или с помощью генератора элементов множества (см. подраздел 3.2). >>> isinstance (a_set, Hashable) Также для создания множества можно использовать конструктор – встроенную функцию set([iterable]) (см. подраздел 8.1 лаб. раб. №1), аргументом которой является итерабельный объект. Поэтому в объекты множества можно преобразовать такие последовательности, как строки, списки, кортежи и диапазоны. Если строка, список, кортеж или диапазон содержат одинаковые элементы, после преобразования из них останется только один: >>> set ('ABBA') Отметим, что, поскольку множество является неупорядоченным контейнером, то и элементы полученного множества могут указываться интерпретатором в произвольном порядке. >>> set ([1,2,[3,4]]) Для создания объектов множества неизменяемого типа frozenset необходимо использовать конструктор – встроенную функцию frozenset() (см. подраздел 8.1 лаб. раб. №1, аргументом которой является итерабельный объект: >>> frozenset (('a', 'c', 'd', 'c')) Экземпляры типов set и frozenset, являясь контейнерами: >>> import collections и не являясь последовательностями: >>> isinstance ({1,2},collections.Sequence) поддерживают лишь часть операций, свойственных последовательностям (те из них, которые также поддерживают и контейнеры): · x in s – возвращает True, если x содержится в s, False – в противном случае; · x not in s – возвращает True, если x не содержится в s, False – в противном случае; · len(s) – возвращает число элементов s; · max(s) – возвращает максимальный элемент s; · min(s) – возвращает миниимальный элемент s. Можно добавить, что объекты изменяемого множества set принадлежат ABC-классу MutableSet: >>> s={1,2,3} а объекты неизменяемого класса frozenset – нет: >>> fs=frozenset(s) Оглавление Операции над множествами Python имеет несколько методов для выполнения основных операций над множествами: · метод union() (объединение) возвращает новое множество, содержащее все элементы каждого из множеств: >>> a_set={1,2,5,6,9} метод симметричен, т.е. a_set.union(b_set)=b_set.union(a_set): >>> b_set.union(a_set) · метод intersection() (пересечение) возвращает новое множество, содержащее все элементы, которые есть и в первом множестве, и во втором: >>> a_set.intersection(b_set) метод симметричен; · метод difference() (разность) возвращает новое множество, содержащее все элементы, которые есть в множестве a_set, но которых нет в множестве b_set: >>> a_set.difference(b_set) этот метод не симметричен, поскольку a_set.difference(b_set) не равно b_set.difference(a_set): >>> b_set.difference(a_set) · метод symmetric_difference() (симметрическая разность) возвращает новое множество, которое содержит только уникальные элементы обоих множеств: >>> a_set.symmetric_difference(b_set) метод симметричен. Оглавление Словари Словари в языке Python имеют тип (класс) dict и представляют собой множество пар вида ключ:значение. Словари в языке Python похожи на ассоциативные массивы языка Jaxascript. Оглавление Создание словарей Для создания словаря в виде литерала необходимо поместить его элементы, заданные в виде пар ключ:значение и разделеные запятыми, в фигурные скобки: >>> a_dict={ 'alpha':1, 'beta':2, 'gamma':3} В качестве ключа необходимо использовать только неизменяемые (хэшируемые) типы: числа (целые и с плавающей точкой), строки, логические значения, кортежи, диапазоны и неизменяемые множества. В качестве значения могут быть заданы любые из рассмотренных типов, включая изменяемые множества и словари. >>> 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 Если ключи и значения словаря заданы последовательностями, то для создания словаря также можно использовать встроенную функцию zip(*iterable) (см. подраздел 8.1 лаб. раб. №1), которая возвращает итератор, элементами которого являются кортежи, где i-й кортеж содержит i-е элементы каждого аргумента последовательностей или итерабельных объектов. Если последовательности, явдяющиеся аргументами функции, имеют разную длину, то формируемые кортежи имеют число элементов, равное длине минимальной последовательности. Если указан один элемент – функция возвращает итератор, состоящий из одноэлементных кортежей. Если аргументы не указаны – возвращается пустой итератор. >>> key_list=[ 'a', 'b', 'c' ] Теперь с помощью функции zip(), аргументами которой являются последовательности key_list и value_tuple, создаем итератор с именем zipped: >>> zipped= zip (key_list, value_tuple), который имеет тип zip: >>> type (zipped) Остается только преобразовать его с помощью конструктора в словарь: >>> e_dict= dict (zipped) Следует сказать, что словари в настоящее время являются единственными представителями ABC-класса Mapping, объекты которого ставят в соответсвие неизменяемые значения произвольным объектам. Являются изменяемыми контейнерами типа Mapping: >>> import collections Для получения значения словаря по ключу нобходимо воспользоваться выражением: >>> a_dict[ 'beta' ] если указанный ключ отсутствует – возбуждается исключение KeyError: >>> a_dict[ 'delta' ] Чтобы получить все значения словаря следует использовать оператор for in: >>> for key in a_dict: Можно изменять значение ключа: >>> a_dict[ 'alpha' ]=11 и добавлять новые пары в словарь: >>> a_dict[ 'epsilon' ]=5 Для удаления ключа необходимо указать: >>> del a_dict[ 'alpha' ] Словари так же, как последовательности и множества поддерживают функцию определения числа элементов len() и оператор in, позволяющий определить принадлежность элемента контейнеру. Оглавление Методы словарей Словари поддерживают следующие методы: · clear() – очищает словарь, возвращая значение {}: >>> b_dict={1:101, 2:102, 3:103} Метод clear() поддерживается всеми изменяемыми классами данных; · copy() – возвращает ссылку на вновь созданный объект класса dict с теми же значениями (т.е. выполняет "поверхностное" копирование, см. раздел 4): >>> b_dict=a_dict.copy() Метод copy() поддерживается всеми изменяемыми классами данных; · get(key[, default]) – если словарь имеет ключ key, возращает его значение, если нет – возвращает значение, заданное вторым аргументом (значение по умолчанию): >>> a_dict.get('gamma', 'new_key') · items() – возвращает элементы словаря в виде пар (key, value): >>> items=a_dict.items() · keys() – возвращает все ключи словаря: >>> a_dict.keys() · pop(key[, default) – если указанный ключ содержится в словаре, удаляет его из словаря и возвращает его значение, иначе возвращает значение по умолчанию. Если значение по умолчанию не указано и ключ не содержится в словаре, то возникает исключение KeyError: >>> a_dict.pop('gamma') · popitem() – удаляет и возвращает произвольную пару вида (key, value) из словаря; · setdefault(key[, default) – похож на метод get(), но если ключа нет в словаре – не только возвращает значение по умолчанию, но и устанавливает его: >>> a_dict.setdefault('delta', 4) · update([dict2]) – возвращает слияние элементов данного словаря и словаря, заданного аргументом (аргумент может быть задан: в виде именованных аргументов, в виде итерабельного типа или в виде словаря (см. описание конструктора dict() в подразделе 2.1): >>> b_dict={ 'figure': 'circle', 'color': 'green' } · values() – возвращает все значения словаря: >>> a_dict.values Оглавление Генераторы В литералах при создании списков, множеств и словарей помимо указания перечня их элементов (см. подразделы 2.1 лаб. раб. №3, 1.1 и 2.1) можно также указать генераторы элементов этих контейнеров. Оглавление Копирование объектов В подразделе 1.4 при описании метода copy() был использован термин поверхностная копия. Поскольку существует еще и глубокая копия, дадим разъяснение этим терминам. · один для создания поверхностной копии – copy.copy(x); · другой для создания глубокой копии – copy.deepcopy(x). Различие между между поверхностным (англ. shallow) и глубоким (англ. deep) копированием имеет смысл только для составных объектов (объектов, которые содержат другие объекты, например, списки, словари или экземпляры классов): · поверхностное копирование создает новый составной объект, в который включаются ссылки на объекты, содержащиеся в исходном объекте; · глубокое копирование создает новый составной объект, в который рекурсивно включаются копии объектов, составляющих исходный объект. В качестве примера создадим и сравним поверзностную и глубокую копию словаря: >>> import copy Видно, что при использовании поверхностного копирования словаря (функции copy()) изменения в полученной копии привели к изменению оригинала. При использовании глубокого копирования (функции deepcopy()) этого не произойдет: >>> a_dict={1:5,2:{3:25}} Для создания "поверхностной" копии помимо метода copy() модуля copy() можно также использовать: · методы copy() изменяемых объектов: списков, множеств и словарей (см. подразделы 2.3 лаб. раб. №3, 1.4 и 2.2); · срезы последовательностей (см. подраздел 1.4.2 лаб. раб. №3); · конструкторы, аргументы которых содержат тот же тип, что и создаваемый объект (см. описания конструкторов всех рассмотренных типов). Оглавление Индивидуальные задания Разработать программу на языке Python, которая выполняет следующее: · 1 Создает множество a_set, содержащее не менее 7 элементов любых разрешенных типов, с помощью (см. колонку "Множество"/"Создание" табл. №1): § 1 – литерала; § 2 – конструктора; § 3 – генератора. · 2 Создает итерабельный объект it_ob, содержащий не менее трех элементов, имеющихся в объекте a_set, и проверить, все ли элементы it_ob хэшируемы. Если нет – заменить нехэшируемые элементы хэшируемыми. · 3 Преобразует объект it_ob в множество b_set и выполняет над множествами a_set и b_set операции (см. колонку "Множество"/"Операции" табл. №1): § 1 – union(); § 2 – intersection(); § 3 – difference(); § 4 – symmetric_difference(). · 4 Создает словарь a_dict с помощью (см. колонку "Словарь"/"Создание" табл. №1): § 1 – литерала; § 2 – конструктора с именованными аргументами; § 3 – конструктора с аргументом, имеющем тип словаря; § 4 – конструктора с аргументом итерабельного типа; § 5 – генератора. · 5 Выполняет следующие методы словаря a_dict (см. колонку "Словарь"/"Методы" табл. №1): § 1 – clear(); § 2 – get(key[, default]); § 3 – items(); § 4 – keys(); § 5 – pop(key[, default); § 6 – popitem(); § 7 – setdefault(key[, default); § 8 – update([dict2]); § 9 – values().
ЛАБОРАТОРНАЯ РАБОТА №6 Тема: Множества. Словари. Генераторы Цель: Рассмотрение способов работы с множествами, словарями и генераторами ОГЛАВЛЕНИЕ 1 Множества Оглавление Множества Объекты множества в языке Python представляют собой неупорядоченные контейнеры (см. подраздел 1.1 лаб. раб. №3) уникальных хэшируемых объектов. >>> from collections import Hashable в то время как изменяемые контейнеры, такие как изменяемые множества (см. подраздел 1.1), словари (см. подраздел 2.1) и списки (см. раздел 2 лаб. раб. №3) – нет: >>> isinstance ([ 'a', 'b', 'c' ], Hashable Объекты, которые являются экземплярами созданных пользователем классов, являются хэшироваными по умолчанию, при сравнении между собой они не равны и значения их хэшей являются значениям их id(). Оглавление Создание множеств Создавать экземпляры изменяемого множества (тип set) можно с помощью литерала, поместив в фигурные скобки элементы множества неизменяемых типов, разделенные запятыми: >>> a_set={1,2, 'a', 'b' } или с помощью генератора элементов множества (см. подраздел 3.2). >>> isinstance (a_set, Hashable) Также для создания множества можно использовать конструктор – встроенную функцию set([iterable]) (см. подраздел 8.1 лаб. раб. №1), аргументом которой является итерабельный объект. Поэтому в объекты множества можно преобразовать такие последовательности, как строки, списки, кортежи и диапазоны. Если строка, список, кортеж или диапазон содержат одинаковые элементы, после преобразования из них останется только один: >>> set ('ABBA') Отметим, что, поскольку множество является неупорядоченным контейнером, то и элементы полученного множества могут указываться интерпретатором в произвольном порядке. >>> set ([1,2,[3,4]]) Для создания объектов множества неизменяемого типа frozenset необходимо использовать конструктор – встроенную функцию frozenset() (см. подраздел 8.1 лаб. раб. №1, аргументом которой является итерабельный объект: >>> frozenset (('a', 'c', 'd', 'c')) Экземпляры типов set и frozenset, являясь контейнерами: >>> import collections и не являясь последовательностями: >>> isinstance ({1,2},collections.Sequence) поддерживают лишь часть операций, свойственных последовательностям (те из них, которые также поддерживают и контейнеры): · x in s – возвращает True, если x содержится в s, False – в противном случае; · x not in s – возвращает True, если x не содержится в s, False – в противном случае; · len(s) – возвращает число элементов s; · max(s) – возвращает максимальный элемент s; · min(s) – возвращает миниимальный элемент s. Можно добавить, что объекты изменяемого множества set принадлежат ABC-классу MutableSet: >>> s={1,2,3} а объекты неизменяемого класса frozenset – нет: >>> fs=frozenset(s) Оглавление Добавление элементов к множеству Имеется два способа добавления элементов в существующее множество: · метод add() принимает один аргумент, который может быть любого неизменяемого типа и добавляет данное значение к множеству: >>> a_set.add((4,5)) · метод update() может принимать несколько аргументов разных типов и добавлять их к множеству, если аргументами являются последовательности (списки, кортежи или множества), то их элементы должны быть хэшируемыми (неизменяемых типов) и добавляться как новые элементы множества (при этом одинаковые элементы удаляются): >>> a_set.update([2,3],{ 'b', 'c' }) Отметим, что объекты типа frozenset, будучи неизменяемыми множествами, не имеют методов добавления элементов к множеству. Оглавление
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-11-27; просмотров: 195; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.008 с.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||