Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
91
Sliced_List = List[3:7]
print("Slicing elements in a range, using slice operation:
[3:7]: ")
print(Sliced_List)
Sliced_List = List[6:]
print("Elements sliced from 6th " "element till the end using
slice operation: [6:]: ")
print(Sliced_List)
Sliced_List = List[:]
print("Printing all elements using slice operation: [:]")
print(Sliced_List)
Результат программы:
Initial List:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Slicing elements in a range, using slice operation: [3:7]:
[4, 5, 6, 7]
Elements sliced from 6th element till the end using slice opera-
tion: [6:]:
[7, 8, 9, 10, 11, 12, 13, 14, 15]
Printing all elements using slice operation: [:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Срезы списка с отрицательным индексом
92
Результат программы:
Initial List:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Elements sliced till 6th element from last: [:-5] :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Elements sliced from index -5 to -1: [-5:-1] :
[11, 12, 13, 14]
Printing List in reverse: [::-1] :
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
7.9 Сортировка списков
Для сортировки списков Python включают в себя встроенные функции sort() и
sorted() с параметром key.
Синтаксис сортировки путем создания нового списка:
sorted_list = sorted(unsorted_list, key=len)
Временная сложность: O(n* logn ), поскольку используется функция sorted().
Дополнительное пространство: O(n), где n – длина первого списка.
Синтаксис для сортировки без создания нового списка:
unsorted_list.sort(key=len)
Временная сложность: O (n log n).
Дополнительное пространство: O (1)
Синтаксис сортировки с использованием лямбда-функции и функции sorted():
sortedList = sorted(unsorted_list, key=lambda x: len(x))
Временная сложность: O (n log n) Временная сложность функции sorted() составляет O(n log n) для среднего и
наихудшего сценариев, где n – количество элементов в списке.
Пространственная сложность: O(n)
93
Дополнительным пространством этого метода является O(n), потому что
создается новый отсортированный список из n элементов.
7.10 Копирование списков
В Python можно выделить различные способы копирования списка, требующих
разного времени выполнения [29].
Способ 1. Использование срезов. Этот способ обеспечивает глубокое
клонирование, создавая копию самого списка вместе со ссылкой.
Временная сложность: O(n), где n - длина фрагмента
Дополнительное пространство: O(1). Способ 2. Копирование списка с помощью = (оператора присваивания) Этот способ обеспечивает поверхностное клонирование.
Временная сложность: O(1)
Дополнительное пространство: O(n), где n – длина списка.
Способ 3. Использование генераторов списка
94
Способ 4. Использование генераторов списка и срезов для вложенных списков.
Пространственная сложность: O (n) Способ 5. Использование метода copy().
95
Способ 6. Использование метода copy.deepcopy() . Обеспечивает независимое копирование как внешних, так и внутренних
элементов списка.
Временная сложность: O(n), где n – количество элементов в списке.
Пространственная сложность: O (n)
Другие интересные способы можно посмотреть в [30].
7.11 Сравнение списков на равенство
Существует множество способов проверки того, содержат ли два неупорядоченных списка одинаковые элементы в одинаковом положении, т. е. проверить, точно ли равны два списка. Некоторые наиболее эффективные по производительности приведены ниже.
Способ 1. Использование all() и zip()
96
Пример использования функции all() и zip() для проверки равенства элементов двух списков, с проверкой порядка.
Временная сложность этого подхода составляет O(n), поскольку он включает в себя один раз повторение списков и выполнение операций с постоянным временем над каждым элементом.
Пространственная сложность равна O(1), поскольку оно включает только не-
сколько переменных постоянного размера.
Способ 2. Использование метода operator.countOf().
Проверка с помощью подсчета количества вхождений элементов в список и длин списков. Не проверяет порядок.
97
Дополнительное пространство: O(1)
Другие интересные способы можно посмотреть в [31].
Быстрый тест производительности сравнения на равенство можно построить на основе примера [32].
7.12 Генераторы (comprehension) списков
Генераторы списков в Python используется для создания новых списков из
других итеративных объектов, таких как кортежи, строки, массивы, списки и т.д. Генератор списка состоит из скобок, содержащих выражение, которое выполняется для каждого элемента вместе с циклом for для перебора каждого элемента.
Синтаксис:
newList = [ выражение(элемент) для элемента в oldList, если условие ]
Пример.
# below list contains square of all odd numbers from range 1 to 10
odd_square = [x ** 2 for x in range(1, 11) if x % 2 == 1]
print(odd_square)
[1, 9, 25, 49, 81]
Та же задача без использования генераторов выглядит следующим образом:
# for understanding, above generation is same as,
odd_square = []
for x in range(1, 11):
if x % 2 == 1:
98
odd_square.append(x**2)
print(odd_square)
[1, 9, 25, 49, 81]
Создание вложенных списков также может быть эффективно выполнено с по­мощью генераторов.
Пример. Генерация вложенного списка (двумерного), состоящего из нулей.
[[0] * m for i in range(n)]
Можно сгенерировать вложенный список, элементы которого определенным образом зависят от индексов элементов.
Пример. Генератор списка с элементами вида:
0 0 0 0 0 0
0 1 2 3 4 5
0 2 4 6 8 10
0 3 6 9 12 15
0 4 8 12 16 20
Будет иметь вид:
[[i * j for j in range(m)] for i in range(n)]
7.13 Методы списков
Таблица 3.1 – Методы списков
Функция
Описание
append()
Добавляет элемент в конец списка
extend()
Добавляет все элементы списка в другой список
insert()
Вставляет элемент по определенному индексу
remove()
Удаляет элемент из списка
clear()
Удаляет все элементы из списка
99
Функция
Описание
index()
Возвращает индекс первого подобранного элемента
count()
Возвращает количество элементов, переданных в качестве аргумента
sort()
Сортировка элементов в списке в порядке возрастания
reverse()
Изменяет порядок элементов в списке на обратный
copy()
Возвращает копию списка
pop()
Удаляет и возвращает элемент с указанным индексом. Если индекс не указан, удаляется и возвращается последний элемент.
Перечисленные выше методы изменяют сам список. Также можно использо­вать встроенные функции, примеры функций приведены в таблице 7.2
Таблица 7.2 – Встроенные функции со списком
Функция
Описание
reduce()
Применение определенной функции, переданной в ее аргументе, ко всем эле­ментам списка сохраняет промежуточный результат и возвращает только ко­нечное итоговое значение
sum()
Суммирует числа в списке
ord()
Возвращает целое число, представляющее кодовую точку Unicode данного символа Unicode
cmp()
Эта функция возвращает 1, если первый список “больше” второго списка max()
Возвращает максимальный элемент данного списка
min()
Возвращает минимальный элемент заданного списка
all()
Возвращает true, если все элементы имеют значение true или если список пуст
any()
Возвращает true, если какой-либо элемент списка имеет значение true, если список пуст, возвращает false
100
Функция
Описание
len()
Возвращает длину списка или размер списка
enumerate()
Возвращает объект перечисления списка
accumulate()
Применение определенной функции, переданной в ее аргументе, ко всем эле­ментам списка возвращает список, содержащий промежуточные результаты
filter()
Проверяет, является ли каждый элемент списка true или нет
map()
Возвращает список результатов после применения данной функции к каждому элементу заданной итерации
lambda()
Эта функция может иметь любое количество аргументов, и только одно выра­жение, которое вычисляется и возвращается.
7.14 Лабораторная работа
Цель и задания
Цель. Изучить, как в языке Python представлены списки; сформировать умения работы со списками: создание списков на Python, удаление и добавление элементов; использовать методы списков; выполнять операции соединения и повторения, сорти­ровку списков
Задания
Разработать программное средство для реализации следующих задач:
1 Обработка одномерного списка по заданному номеру варианта.
2 Обработка двумерного списка (т.е. списка списков) по заданному номеру варианта.
7.14.1 Порядок выполнения лабораторной работы
1 Ознакомиться с целью и заданиями, общими методическими указаниями к
выполнению лабораторных работ.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]