|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[6] Список - это более обычный для опытных (испорченных другими языками) программистов, встречающийся во многих языках программирования высокого уровня. Сечения берутся подобным же образом: K=range(l,10) даёт [1,2,3,4,5,6,7,8,9] L=K[2:] даёт [3,4,5,6,7,8,9] В первой строчке стандартной функцией питона мы создали список последовательных целых чисел от 1 до 10 (как обычно, первое число вошло в результат, а второе - нет). Эта функция чрезвычайно полезна и, как сказал бы на нашем месте философ, если бы ее не было, ее стоило бы придумать. Полную её мощь мы сможем вкусить на следующей лекции, когда доберемся до операторов циклов. Пока же вернемся к последовательностям. Во второй строчке берется конечное сечение - с третьего элемента по последний включительно. Прочие типы сечений берутся аналогично. Кроме того, мы можем изменять значения элементов списка: К [5] =5 даёт в К [3,4,5,6,7,5,9] Здесь следует быть осторожным и различать семантику копирования и семантику указателей. Например, если мы напишем: М=[3,4,5] N[0]=333 То какое значение окажется в М? Правильно, [333,4,5], потому что какое бы имя мы не использовали: М или N, обращение идет к одним и тем же ячейкам оперативной памяти. Воспользуемся уже известным методом для определения операций над списком - функцией dir: »> dir( []) [append, count, extend, index, insert, pop, remove, reverse, sort] Эти функции служат соответственно для добавления элемента в конец готового списка; для подсчета количества элементов списка, равных данному; для расширения этого списка другой последовательностью (в т.ч. и кортежем) добавлением всех его элементов в конец этого; для действия, обратного взятию элемента - определения индекса элемента по его значению; N. insert (2,3) позволяет вставить новый элемент не в конец списка, а на определенное место, номер места идёт первым параметром, значение - вторым; pop позволяет вытолкнуть последний элемент из списка (при этом сам список становится короче); remove удаляет элемент, значение которого ему дано; reverse обращает список (последний элемент теперь идёт первым); sort сортирует список по возрастанию. Для сортировки по убыванию, конечно, можно использовать комбинацию sort и reverse. Упражнение. Запустите функцию dir для кортежа и объясните результат. Для преобразования строки или последовательности в список используется функция list(): »> list(123) [1,2,3] »> list((l,2,3)) [1,2,3] Если аргумент этой функции - список, то она создаст копию и вернет именно её (а не его исходный список). Таким образом, если Р - список, то P=list(Q) эквивалентно P=Q[:]. Почему для кортежа копия не создавалась, а для списка создаётся? Да просто никто не будет изменять кортеж, и нет смысла хранить два одинаковых неизменяемых объекта. Вдумчивому слушателю (читателю) не даст покоя очередной вопрос: имеют ли кортежи право на существование, раз всё их отличие от списков заключается в неудобстве, связанном с невозможностью изменения структуры? Разница между кортежем и списком философская, её можно уподобить разнице между джазом и блюзом. И то, и другое - музыка, которую могут исполнять одни и те же музыканты на тех же инструментах, но разницу можно уловить невооруженным ухом. Суть этих стилей принципиально разная: джаз - это импровизация, полёт фантазии, экспромт, а блюз - это крик души испытываемого судьбой человека. Список - это прежде всего нумерованая последовательность, кортеж - прежде всего упорядоченная. Координаты точки в пространстве - это кортеж; перечень фамилий студентов - список. Цветовые составляющие пикселя - кортеж; строчки, введенные из файла - список. Конечно, удобства и полноты ради и список упорядочен, и кортеж пронумерован, но это уже вторично. Безусловно, никто (и даже сам Гвидо ван Россум) не в силах вам помешать использовать списки вместо кортежей везде, где они только встречаются - начинающие программисты, замученные паскалем, бейсиком и явой, так и делают, но это (кроме замедления работы программы) есть ни что иное, как преступление против философии - самое тяжкое из всех преступлений, а если это и что-то другое, то демонстрация собственного невежества, некомпетентности и неумения грамотно пользоваться предоставляемыми средствами. Тем не менее, даже дав зарок никогда не пользоваться кортежами, вы рискуете вскоре его нарушить, даже не подозревая об этом. Например, в следующем случае: R, S=2,3 В этом случае на лету создаётся кортеж, прозрачный для программиста, и тут же уничтожается за ненадобностью. Нет необходимости ни нумеровать элементы (кроме как для того, чтобы знать, в какой последовательности они идут), ни реализовывать возможность последующего изменения элементов, их добавления, сортировки и т.д. - легко, просто, быстро, доступно. Аналогично используется так называемая декомпозиция кортежа: Т=1,2,3 U,V,W=T Теперь понятно, как реализуется предыдущий пример: кортеж сначала создаётся, а потом декомпозиционируется. А о каких возможностях мы говорили, заявляя, что как-то можно обойти ограничения, наложеные изобретателем кортежей? Есть одна лазейка в его определении, позволяющая кое-что сделать. Сказано - нельзя менять структуру. Изменение самих элементов кортежа может существенно изменить структуру, потому и запрещено. Но представьте, что один из элементов кортежа - список. Можно ли менять его элементы? Да, конечно! Х=[2,3,4],5,6 X [1] =4 - нельзя Х[0] [1]=33 - можно 3. Словарь есть ассоциативный изменяемый неоднородный массив. Задается парами ключ: значение, перечисленными в фигурных скобках. Словарь - это квинтэссенция программистской мысли, направленной на изучение последовательностей, это массив, в котором элементы пронумерованы не подряд идущими целыми положительными числами, а чем угодно: строками, вещественными числами, кортежами. Конечно, это не может быть сделано списками (которые меняют свою структуру) и словарями. Индекс элемента словаря называется ключей. Сечений словарь не поддерживает, а для создания копии нужно написать в явном виде: Y={"one":i,"tvo":2} Z=A.copy() Полное очищение словаря производится функцией clear(), добавление новой пары - простым присваиванием: Y["three"]=3 При попытке узнать значение по несуществующему ключу выдаётся ошибка и работа программы останавливается, поэтому нужно почаще пользоваться функцией has key О, определяющей, есть ли такой ключ |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||