Тип данных является сложным, если значение этого типа можно рассматривать как некоторую совокупность элементов. Элементы сложного типа могут быть значениями как простых типов - чисел, строк, логических значений, так и сложных типов.
В большинство языков программирования встроен такой тип данных как массив, представляющий упорядоченную совокупность данных одного типа.
В языке Python встроенного типа массив нет, но есть такие сложные типы, как:
О проекте, сопровождающем главу 2
В тексте, который я пишу, программный код играет важное, если не определяющее значение. Все приводимые примеры - это фрагменты созданного проекта. Для этой лекции я создал в Visual Studio 2019 - проект на языке Python с именем Lecture2.rar, в который включил пять модулей с именами; TypeList, TypeDict, TypeTuple, TypeSet, TypeFile. Каждый модуль содержит набор тестовых функций, которые вызываются для исполнения. Коды этих функций и полученные результаты приводятся в тексте лекций.
Список - упорядоченная совокупность элементов возможно разного типа. Элементами списка могут быть списки. Список относится к изменяемым типам. Константы, задающие список, заключаются в квадратные скобки, элементы разделяются запятыми.
Список является более общей структурой данных чем массив хотя бы потому, что его элементы могут быть разных типов. Но понятно, что списки позволяют моделировать массивы. Обычный список, содержащий элементы одного типа можно рассматривать как одномерный массив. Двумерный массив может быть представлен списком, все элементы которого являются списками, представляющими одномерные массивы. Так что список позволяет моделировать массив массивов, что позволяет моделировать массивы произвольной размерности.
Список можно рассматривать как массив ссылок на объекты. Поскольку список является изменяемым типом, то в результате выполнения операций над списком может изменяться сам объект, а ссылка останется без изменения. Поскольку объект может иметь псевдонимы, - имена, связанные со ссылками, то изменение объекта означает, что изменяются значения у всех имен - псевдонимов данного объекта. Это требует от программиста, работающего со списками, особой аккуратности, чтобы изменения объекта, выполненные для одного из его имен, корректно работали в тех модулях, где используется этот же объект, но под другим именем.
Какие операции допустимы при работе со списком? Элементы списка можно получать по индексу, их можно изменять, можно добавлять и удалять элементы, список можно сортировать, можно получать и изменять подсписок, используя срезы, выполнять другие операции.
Приведем некоторые примеры работы со списками.
Начнем с создания списка, присвоив переменной L константный список - последовательность элементов, разделяемых запятой, заключенную в квадратные скобки.
Метод append позволяет добавить в конец списка новый элемент. Метод insert позволяет добавить новый элемент в заданную позицию списка. Нумерация элементов списка начинается с нуля. Метод extend позволяет добавить в конец списка итерируемую последовательность элементов, заданную, например, списком.
Пример:
#Примеры работы со списками - class list
def test1():
L = [1, 2, 3]
L.append([1,2,3])
L.insert(3, 4)
L.extend([5, 6, 7])
print(L)
#test1()
Результат:
Операция сложения +, определенная над парой списков, как и следовало ожидать, означает конкатенацию этих списков. Операция умножения, заданная для списка и целочисленной константы, означает многократную конкатенацию одного и того же списка.
Пример:
def test2():
#сложение и умножение
L1 = [1, 2, 3]
L2 = [4, 5]
L1 = L1 + L2
print(L1)
L2 = L2 * 3
print(L2)
test2()
Результаты работы:
Получить элемент можно по его индексу. Поскольку список может содержать элементы разных типов, то часто приходится, получив элемент, определить его тип, используя метод type. Метод pop также позволяет получить элемент по индексу, но в качестве побочного эффекта удаляет этот элемент из списка. Если в методе pop индекс не указан, то по умолчанию возвращается и удаляется последний элемент списка.
Удалить элемент из списка можно не только по индексу, используя метод pop, но и по значению, используя метод remove. Метод не безопасен, поскольку возникает ошибка, если указанного для удаления элемента нет в списке. Если нет уверенности в существовании элемента в списке, то перед удалением необходимо выполнить проверку существования элемента в списке, используя операцию in. Если элемент существует в списке, то метод index позволяет определить индекс первого вхождения.
Пример:
def test3():
L = [1, 'one', 2, 'two', 3, 'three']
item = L[1]
print("item = " + item + " type(item) = " + str(type(item)) )
item = L.pop(0)
item = L.pop(0)
print("item = " + item + " type(item) = " + str(type(item)) )
if 'one' in L:
L.remove('one')
if 'three' in L:
L.remove('three')
exist = 3 in L
if exist:
index = L.index(3)
L.pop(index)
print(L)
test3()
Результат:
Заметьте, при удалении элемента индексы оставшихся элементов пересчитываются.
Заметьте, метод remove удаляет первое вхождение элемента в список, а не все вхождения.
Помимо методов, показанных в примерах, для списка определены и другие полезные методы - clear, copy, count, reverse, sort, содержательные имена которых говорят об их назначении. Примеров применения этих методов приводить не буду.
Стоит только обратить внимание на два метода - len и count. Для определения числа элементов списка s применяется конструкция len(s). Заметьте, len не является методом класса list и применяется для определения числа элементов различных структур данных. Метод count класса list применяется для определения числа вхождений некоторого элемента в список.
Списки, также как строки и некоторые другие сложные типы данных, являются потомками более общей структуры данных, называемой последовательностью. Все потомки последовательности наследуют ее свойства и методы.
Последовательность - это упорядоченная совокупность элементов. Элементы последовательности имеют индексы. Индексация начинается с нуля. Последовательность итерирована, это означает, что в цикле возможен перебор элементов в порядке их упорядоченности. Срезом последовательности называется подпоследовательность ее элементов, задаваемая начальным и конечным индексом. Если S - последовательность, то срез задается как S(i : j) и содержит j - i элементов. Срез (подпоследовательность) содержит элементы, начиная с индекса i и заканчивая индексом j -1. Заметьте, индекс i входит в срез включительно, j - исключительно. В задании среза разрешается опускать один из индексов. Если опущен индекс i, то полагается, что срез начинается с первого элемента, имеющего индекс 0. Если опущен индекс j, то полагается, что срез заканчивается последним элементом последовательности.
Для последовательности определен ряд операций (методов), которые наследуются потомками. В частности, рассмотренная выше операция in, определяет вхождение элемента в последовательность. Рассмотрим работу со срезами для списков и некоторые операции, определенные для последовательностей и наследуемые списком.
Пример:
def test4():
L = ["Мы", "стремились", "достичь", "легкой", "жизни"]
print(L)
NL = L
NL[1:3] = ["решили", "не", "искать"]
print(L)
print(NL)
test4()
Результаты:
Заметьте, L и NL - это псевдонимы - два имени одного объекта. Поскольку списки относятся к изменяемым типам, то изменение объекта, выполненное одним из псевдонимов, отражается на всех псевдонимах. Этот пример демонстрирует особенности работы с псевдонимами - несколькими ссылками на один объект.
В следующем примере показана возможность удаления подсписка, используя метод del, наследуемый от последовательности, и вставка подсписка в заданное место.
Пример:
def test5():
# Удаление и Добавление подсписков
L = ["Мы", "стремились", "достичь", "легкой", "жизни"]
del(L[1:3])
print(L)
L[1 : 1] = ["решили", "не", "искать"]
print(L)
test5()
Подводя итог, можно отметить, что списки в языке Python задают мощную структуру данных, сочетающую возможности классических массивов с прямым доступом к каждому элементу по его индексу. С другой стороны, список Python является классическим списком - динамической структурой, меняющей размер в ходе выполнения операций над списком и допускающей вставку и удаление элементов. От последовательностей список унаследовал возможность работы со срезами - подсписками списка.
Тип данных является сложным, если значение этого типа можно рассматривать как некоторую совокупность элементов. Элементы сложного типа могут быть значениями как простых типов - чисел, строк, логических значений, так и сложных типов.
В большинство языков программирования встроен такой тип данных как массив, представляющий упорядоченную совокупность данных одного типа.
В языке Python встроенного типа массив нет, но есть такие сложные типы, как:
О проекте, сопровождающем главу 2
В тексте, который я пишу, программный код играет важное, если не определяющее значение. Все приводимые примеры - это фрагменты созданного проекта. Для этой лекции я создал в Visual Studio 2019 - проект на языке Python с именем Lecture2.rar, в который включил пять модулей с именами; TypeList, TypeDict, TypeTuple, TypeSet, TypeFile. Каждый модуль содержит набор тестовых функций, которые вызываются для исполнения. Коды этих функций и полученные результаты приводятся в тексте лекций.
Список - упорядоченная совокупность элементов возможно разного типа. Элементами списка могут быть списки. Список относится к изменяемым типам. Константы, задающие список, заключаются в квадратные скобки, элементы разделяются запятыми.
Список является более общей структурой данных чем массив хотя бы потому, что его элементы могут быть разных типов. Но понятно, что списки позволяют моделировать массивы. Обычный список, содержащий элементы одного типа можно рассматривать как одномерный массив. Двумерный массив может быть представлен списком, все элементы которого являются списками, представляющими одномерные массивы. Так что список позволяет моделировать массив массивов, что позволяет моделировать массивы произвольной размерности.
Список можно рассматривать как массив ссылок на объекты. Поскольку список является изменяемым типом, то в результате выполнения операций над списком может изменяться сам объект, а ссылка останется без изменения. Поскольку объект может иметь псевдонимы, - имена, связанные со ссылками, то изменение объекта означает, что изменяются значения у всех имен - псевдонимов данного объекта. Это требует от программиста, работающего со списками, особой аккуратности, чтобы изменения объекта, выполненные для одного из его имен, корректно работали в тех модулях, где используется этот же объект, но под другим именем.
Какие операции допустимы при работе со списком? Элементы списка можно получать по индексу, их можно изменять, можно добавлять и удалять элементы, список можно сортировать, можно получать и изменять подсписок, используя срезы, выполнять другие операции.
Приведем некоторые примеры работы со списками.
Начнем с создания списка, присвоив переменной L константный список - последовательность элементов, разделяемых запятой, заключенную в квадратные скобки.
Метод append позволяет добавить в конец списка новый элемент. Метод insert позволяет добавить новый элемент в заданную позицию списка. Нумерация элементов списка начинается с нуля. Метод extend позволяет добавить в конец списка итерируемую последовательность элементов, заданную, например, списком.
Пример:
#Примеры работы со списками - class list
def test1():
L = [1, 2, 3]
L.append([1,2,3])
L.insert(3, 4)
L.extend([5, 6, 7])
print(L)
#test1()
Результат:
Операция сложения +, определенная над парой списков, как и следовало ожидать, означает конкатенацию этих списков. Операция умножения, заданная для списка и целочисленной константы, означает многократную конкатенацию одного и того же списка.
Пример:
def test2():
#сложение и умножение
L1 = [1, 2, 3]
L2 = [4, 5]
L1 = L1 + L2
print(L1)
L2 = L2 * 3
print(L2)
test2()
Результаты работы:
Получить элемент можно по его индексу. Поскольку список может содержать элементы разных типов, то часто приходится, получив элемент, определить его тип, используя метод type. Метод pop также позволяет получить элемент по индексу, но в качестве побочного эффекта удаляет этот элемент из списка. Если в методе pop индекс не указан, то по умолчанию возвращается и удаляется последний элемент списка.
Удалить элемент из списка можно не только по индексу, используя метод pop, но и по значению, используя метод remove. Метод не безопасен, поскольку возникает ошибка, если указанного для удаления элемента нет в списке. Если нет уверенности в существовании элемента в списке, то перед удалением необходимо выполнить проверку существования элемента в списке, используя операцию in. Если элемент существует в списке, то метод index позволяет определить индекс первого вхождения.
Пример:
def test3():
L = [1, 'one', 2, 'two', 3, 'three']
item = L[1]
print("item = " + item + " type(item) = " + str(type(item)) )
item = L.pop(0)
item = L.pop(0)
print("item = " + item + " type(item) = " + str(type(item)) )
if 'one' in L:
L.remove('one')
if 'three' in L:
L.remove('three')
exist = 3 in L
if exist:
index = L.index(3)
L.pop(index)
print(L)
test3()
Результат:
Заметьте, при удалении элемента индексы оставшихся элементов пересчитываются.
Заметьте, метод remove удаляет первое вхождение элемента в список, а не все вхождения.
Помимо методов, показанных в примерах, для списка определены и другие полезные методы - clear, copy, count, reverse, sort, содержательные имена которых говорят об их назначении. Примеров применения этих методов приводить не буду.
Стоит только обратить внимание на два метода - len и count. Для определения числа элементов списка s применяется конструкция len(s). Заметьте, len не является методом класса list и применяется для определения числа элементов различных структур данных. Метод count класса list применяется для определения числа вхождений некоторого элемента в список.
Списки, также как строки и некоторые другие сложные типы данных, являются потомками более общей структуры данных, называемой последовательностью. Все потомки последовательности наследуют ее свойства и методы.
Последовательность - это упорядоченная совокупность элементов. Элементы последовательности имеют индексы. Индексация начинается с нуля. Последовательность итерирована, это означает, что в цикле возможен перебор элементов в порядке их упорядоченности. Срезом последовательности называется подпоследовательность ее элементов, задаваемая начальным и конечным индексом. Если S - последовательность, то срез задается как S(i : j) и содержит j - i элементов. Срез (подпоследовательность) содержит элементы, начиная с индекса i и заканчивая индексом j -1. Заметьте, индекс i входит в срез включительно, j - исключительно. В задании среза разрешается опускать один из индексов. Если опущен индекс i, то полагается, что срез начинается с первого элемента, имеющего индекс 0. Если опущен индекс j, то полагается, что срез заканчивается последним элементом последовательности.
Для последовательности определен ряд операций (методов), которые наследуются потомками. В частности, рассмотренная выше операция in, определяет вхождение элемента в последовательность. Рассмотрим работу со срезами для списков и некоторые операции, определенные для последовательностей и наследуемые списком.
Пример:
def test4():
L = ["Мы", "стремились", "достичь", "легкой", "жизни"]
print(L)
NL = L
NL[1:3] = ["решили", "не", "искать"]
print(L)
print(NL)
test4()
Результаты:
Заметьте, L и NL - это псевдонимы - два имени одного объекта. Поскольку списки относятся к изменяемым типам, то изменение объекта, выполненное одним из псевдонимов, отражается на всех псевдонимах. Этот пример демонстрирует особенности работы с псевдонимами - несколькими ссылками на один объект.
В следующем примере показана возможность удаления подсписка, используя метод del, наследуемый от последовательности, и вставка подсписка в заданное место.
Пример:
def test5():
# Удаление и Добавление подсписков
L = ["Мы", "стремились", "достичь", "легкой", "жизни"]
del(L[1:3])
print(L)
L[1 : 1] = ["решили", "не", "искать"]
print(L)
test5()
Подводя итог, можно отметить, что списки в языке Python задают мощную структуру данных, сочетающую возможности классических массивов с прямым доступом к каждому элементу по его индексу. С другой стороны, список Python является классическим списком - динамической структурой, меняющей размер в ходе выполнения операций над списком и допускающей вставку и удаление элементов. От последовательностей список унаследовал возможность работы со срезами - подсписками списка.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.