Структуры данных Python
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Структуры данных Python
Структуры данных – это структуры, которые могут хранить некоторые данные
вместе. Другими словами, они используются для хранения связанных данных.
В Python существуют четыре встроенных структуры данных:
1. Список,
2. Кортеж,
3. Словарь
4. Множество.
5. Строки (?- скалярный или структурированный тип ?)
В Python нет массивов. Однако списки обладают
многими свойствами массивов.
Для работы с матрицами и многомерными
массивами может использоваться пакет NumPy
(библиотека с открытым исходным кодом).
Список (list)
Списки
в
Python
-
упорядоченные
изменяемые
коллекции
объектов
произвольных типов.
Список элементов должен быть заключён в квадратные скобки, чтобы Python
понял, что это список. Как только список создан, можно добавлять, удалять или искать
элементы в нём. Поскольку элементы можно добавлять и удалять, мы говорим, что
список – это изменяемый тип данных, т.е. его можно модифицировать.
1
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Рассмотрим пример работы со списком.
Пример 9.
# Это список покупок
shoplist = ['хлеб', 'молоко', 'яблоки', 'бананы']
print('Я должен сделать ', len(shoplist), 'покупок.')
print('Покупки:', end=' ')
for item in shoplist:
print(item, end=' ')
print('\nТакже нужно купить риса.')
shoplist.append('рис')
print('Теперь мой список покупок таков:', shoplist)
print('Отсортирую-ка я свой список')
shoplist.sort()
print('Отсортированный список покупок выглядит так:',
shoplist)
print('Первое, что мне нужно купить, это', shoplist[0])
olditem = shoplist[0]
del shoplist[0]
print('Я купил', olditem)
print('Теперь мой список покупок:', shoplist)
Список можно создать с помощью функции list() на основе любого
итерируемого объекта.
Пример 10.
>>> list('список')
Получим
['с', 'п', 'и', 'с', 'о', 'к']
2
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Список может содержать любое количество любых объектов (в том числе и
вложенные списки), или не содержать ничего.
Пример 11.
spisok = [11, 34, 3.14, 's', ['h','i','!']]
print(spisok[0])
print(spisok[4])
print(spisok[4][1])
Получим:
11
['h', 'i', '!']
i
Списки можно создавать с помощью генератора списков.
Пример 12.
>>> c = [c * 3 for c in 'list']
>>> c
['lll', 'iii', 'sss', 'ttt']
Функции и методы списков
Функция len(список) возвращает длину списка (len – length, длина).
3
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Списки являются очень мощным инструментом работы с данными и позволяют
решать очень много различных задач.
При попытке доступа к несуществующему индексу возникает исключение
(исключительная ситуация) IndexError.
Так, если в списке из Примера 11 мы попытаемся получить элемент с индексом
5, то получим:
Пример 13.
spisok = [11, 34, 3.14, 's', ['h','i','!']]
print(spisok[0])
print(spisok[4])
print(spisok[4][1])
4
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
print(spisok[5])
Вывод:
11
['h', 'i', '!']
i
Traceback (most recent call last):
File " \Лекция
- 1\primer13.py", line 5, in
print(spisok[5])
IndexError: list index out of range
В Python поддерживаются также отрицательные индексы, при этом нумерация
идёт с конца, например:
Пример 14.
spisok = [11, 34, 3.14, 's', ['h','i','!']]
print(spisok[-1])
print(spisok[-3])
Вывод:
['h', 'i', '!']
3.14
Отрицательные индексы – это довольно таки полезная возможность, так как
позволяет удобным образом обрабатывать списки с конца.
5
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Срезы (slice)
Срез позволяет получить часть списка (или строки).
item[START:STOP:STEP]
- операция среза берёт срез от номера START, до STOP (не включая его), с шагом
STEP. По умолчанию START = 0, STOP = длине объекта, STEP = 1. Любой параметр
(а возможно, и все) параметры могут быть опущены.
Пример.2-1 (файл primer2-1.py)
s = [3, 4, 8, 7]
print(s[:])
# Срез – все элементы списка
print(s[1:])
# Срез – элементы с 1 до последнего
print(s[:3])
# Срез – элементы с 0 до 2
print(s[::2])
# Срез – элементы от начала с шагом 2
Вывод:
[3, 4, 8, 7]
[4, 8, 7]
[3, 4, 8]
[3, 8]
В срезе параметры также могут быть отрицательными.
Пример.2-2 (файл primer2-2.py)
s = [3, 4, 8, 7]
print(s[::-1])
# Срез – все элементы списка в обратном
порядке
print(s[:-2])
# Срез – элементы с 0 до -2
6
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
print(s[-2::-1])
# Срез – элементы с -2 до 0 с шагом -1
print(s[1:4:-1])2
Вывод:
[7, 8, 4, 3]
[3, 4]
[8, 4, 3]
[]
В последнем случае результатом является пустой список, так как START>>k = tuple()
>>> k
()
2) С помощью литерала кортежа – круглых скобок
8
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
>>> k = ()
>>> k
()
Создадим кортеж из 1 элемента.
>>> a = ('s')
>>> a
Получим
's'
, а это список строка.
Чтобы создать не список, а кортеж, нужно записать так:
>>> a = ('s',)
>>> a
Получим
('s',)
Запятая после первого (и единственного) элемента кортежа необходима для того,
чтобы Python мог отличить кортеж от скобок, окружающих объект в выражении.
Эта запятая нужно только у кортежей, состоящих из 1 элемента.
Правильной будет также такая запись
>>> a = 's',
С помощью функции tuple() можно создать кортеж из итерируемого объекта:
>>> k=tuple('Это кортеж')
>>> k
('Э', 'т', 'о', ' ', 'к', 'о', 'р', 'т', 'е', 'ж')
9
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Операции с кортежами
К кортежам применимы все операции над списками, которые не изменяют
кортеж (сложение, умножение на число, методы index() и count() и некоторые другие
операции). Можно также по-разному менять элементы местами, и так далее.
Например, (гордость программистов на python !) - обмен значениями двух
переменных.
Пример 2-5(файл primer2-5.py) .
a='Python'
b='Pascal'
a,b=b,a # Обмен значениями на Pyhton!
print('a='+a)
print('b='+b)
Вывод
a=Pascal
b=Python
Если попробовать изменить элемент кортежа, то мы получим ошибку, так как кортежи
являются неизменяемыми объектами.
Пример 2-6(файл primer2-6.py) .
# Пытаемся изменить кортеж
a='Python','Pascal'
print(a)
a[1]='C#'
a.append('C#')
Вывод.
10
Объектно-ориентированный анализ
и программирование. Лекция 2019 – 3 .
Здесь последние 2 оператора вызовут ошибки.
Менять элементы кортежа нельзя, но переопределить весь кортеж заново – можно.
11