Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование генератора для формирования списка↑ ⇐ ПредыдущаяСтр 3 из 3 Содержание книги
Поиск на нашем сайте
Например, создание списка кубов целых чилел от 1 до 10 можно осуществить следующим образом: >>> a_list=[x**3 for x in range (1, 11)] Выражение x**3 for x in range(1,11) является генераторным выражением. Оно имеет тип генератора: >>> type (x**3 for x in range (1, 11)) и состоит из выражения x**3, за которым следует оператор for для итерабельного типа. В таком виде генераторное выражение может использоваться только в качестве единичного аргумента в функциях. В остальных случаях необходимо указывать его в скобках, например при анализе, является ли тип generator итерабельным: >>> import collections В приведенном примере сформированные кубы целых чисел сохранены в памяти в виде списка. Для длинных последовательностей это не всегда удобно. Рассмотрим вариант генерации кубов чисел без сохранения их в памяти: >>> gen=(x**3 for x in range (1, 11)) Поскольку значения генератора gen не сохранены в памяти повторное его использование ничего не дает: >>> for x in gen: Оглавление Использование генератора для формирования множества Создадим с помощью генератора множество букв, из которых состоит предложение "Карл украл у Клары кораллы", представив их в верхнем регистре: >>> a_set={x for x in 'Карл украл у Клары кораллы'.upper()} Оглавление Использование генератора для формирования словаря В качестве последнего примера использования генераторов рассмотрим создание словаря, ключами которого являются числа, заданные в списке, а значениями – квадратные корни этих чисел: >>> {x:x**(1/2) for x in [2, 5, 25] } Формировать элементы последовательностей также можно с использованием встроенной функции map() (см. подраздел 1.5.2 лаб. раб. №6). Оглавление Копирование объектов В подразделе 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().
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-11-27; просмотров: 188; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.147.141 (0.006 с.) |