Введение
Добро пожаловать в эту практическую лабораторную работу по спискам (Lists) и кортежам (Tuples) в Python. Списки являются одной из самых фундаментальных и универсальных структур данных в Python, позволяя хранить упорядоченные коллекции элементов. Кортежи похожи на списки, но с ключевым отличием: они неизменяемы (immutable).
В ходе этой лабораторной работы вы научитесь создавать списки, получать доступ к их элементам и манипулировать ими, а также выполнять общие операции, такие как сортировка и итерация (циклы). Вы также изучите кортежи и поймете, когда следует использовать их вместо списков.
Эта лабораторная среда представляет собой предварительно настроенную WebIDE. Все необходимые файлы для этой работы уже созданы для вас в директории /home/labex/project. Давайте начнем.
Доступ к Элементам Списка
На этом шаге вы узнаете, как извлекать элементы из списка с помощью индексов и как получать подсписки с помощью срезов (slicing). Списки — это упорядоченные коллекции элементов, заключенные в квадратные скобки [].
Сначала откройте файл step1_access.py в проводнике файлов слева. Мы будем писать наш код в этом файле.
Примечание: Если вы не знакомы с использованием WebIDE (похожего на VS Code), пожалуйста, изучите его сначала в этой лаборатории.
Получение значений по индексам
Доступ к элементам списка осуществляется с помощью индексации, начинающейся с нуля, что означает, что первый элемент находится по индексу 0.
Добавьте следующий код в step1_access.py, чтобы создать список и получить доступ к его первому элементу:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## Доступ к первому элементу (индекс 0)
print(furniture[0])
Чтобы запустить скрипт, откройте терминал в WebIDE и выполните следующую команду:
python3 /home/labex/project/step1_access.py
Вы должны увидеть первый элемент списка, напечатанный в консоли.
Вывод:
table
Отрицательные индексы
Вы также можете использовать отрицательные индексы для доступа к элементам с конца списка. Индекс -1 соответствует последнему элементу, -2 — предпоследнему и так далее.
Измените step1_access.py, чтобы получить доступ к последнему элементу:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## Доступ к последнему элементу (индекс -1)
print(furniture[-1])
Запустите скрипт снова:
python3 /home/labex/project/step1_access.py
Вывод:
shelf
Получение подсписков с помощью срезов
Срезы (Slicing) позволяют получить подсписок, используя синтаксис [start:end]. Индекс start включается в срез, а индекс end — исключается.
Давайте попрактикуемся. Для вашей проверочной задачи измените step1_access.py, чтобы создать список и напечатать его срез. Замените существующее содержимое следующим кодом:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## Получить подсписок от индекса 1 до (но не включая) индекса 3
sublist = furniture[1:3]
print(sublist)
Запустите скрипт, чтобы увидеть результат:
python3 /home/labex/project/step1_access.py
Вывод:
['chair', 'rack']
Вы также можете создать копию списка, используя полный срез [:]. Любые изменения в исходном списке не повлияют на копию.
## step1_access.py
spam = ['cat', 'bat', 'rat', 'elephant']
spam2 = spam[:] ## Создание поверхностной копии (shallow copy)
spam.append('dog')
print(spam)
print(spam2)
Запустите скрипт:
python3 /home/labex/project/step1_access.py
Вывод:
['cat', 'bat', 'rat', 'elephant', 'dog']
['cat', 'bat', 'rat', 'elephant']
После того как вы успешно напечатали срез ['chair', 'rack'], нажмите кнопку Verify (Проверить), чтобы перейти к следующему шагу.
Изменение и Манипуляции со Списками
На этом шаге вы изучите, как управлять содержимым списка и изменять его. Это включает изменение значений, объединение списков и добавление новых элементов.
Откройте файл step2_modify.py, чтобы начать.
Определение длины списка с помощью len()
Функция len() возвращает количество элементов в списке.
Добавьте этот код в step2_modify.py:
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
print(len(furniture))
Запустите скрипт:
python3 /home/labex/project/step2_modify.py
Вывод:
4
Изменение значений по индексам
Вы можете изменить элемент в списке, присвоив новое значение его индексу.
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
furniture[0] = 'desk' ## Изменяем первый элемент
print(furniture)
Запустите скрипт:
python3 /home/labex/project/step2_modify.py
Вывод:
['desk', 'chair', 'rack', 'shelf']
Объединение и повторение
Вы можете объединить два списка с помощью оператора + (конкатенация) или повторить содержимое списка с помощью оператора * (репликация).
## step2_modify.py
list1 = [1, 2, 3]
list2 = ['A', 'B', 'C']
combined_list = list1 + list2
print(combined_list)
replicated_list = ['X'] * 3
print(replicated_list)
Запустите скрипт:
python3 /home/labex/project/step2_modify.py
Вывод:
[1, 2, 3, 'A', 'B', 'C']
['X', 'X', 'X']
Добавление значений с помощью append() и insert()
- Метод
append()добавляет элемент в конец списка. - Метод
insert()добавляет элемент по указанному индексу.
Для выполнения задания по верификации объединим эти операции. Замените содержимое step2_modify.py следующим кодом. Этот скрипт создаст список, добавит элемент в конец и вставит другой в начало.
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
## Добавить 'bed' в конец списка
furniture.append('bed')
## Вставить 'desk' в начало списка (индекс 0)
furniture.insert(0, 'desk')
print(furniture)
Запустите скрипт, чтобы увидеть окончательно измененный список:
python3 /home/labex/project/step2_modify.py
Вывод:
['desk', 'table', 'chair', 'rack', 'shelf', 'bed']
Как только ваш скрипт выдаст правильный вывод, нажмите Verify (Проверить).
Удаление Значений и Сортировка
На этом шаге вы узнаете о различных способах удаления элементов из списка, а также о том, как отсортировать содержимое списка.
Пожалуйста, откройте файл step3_remove.py.
Удаление значений
Python предоставляет несколько способов удаления элементов из списка:
- Оператор
del: Удаляет элемент по указанному индексу. - Метод
remove(): Удаляет первое вхождение указанного значения. - Метод
pop(): Удаляет и возвращает элемент по указанному индексу (или последний элемент, если индекс не указан).
Посмотрим, как они работают. Добавьте это в step3_remove.py:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
del furniture[2] ## Удаляет 'rack'
print(furniture)
furniture.remove('chair') ## Удаляет 'chair'
print(furniture)
Запустите скрипт:
python3 /home/labex/project/step3_remove.py
Вывод:
['table', 'chair', 'shelf']
['table', 'shelf']
Сортировка значений с помощью sort()
Метод sort() сортирует список на месте (in place). По умолчанию сортировка выполняется по возрастанию.
## step3_remove.py
numbers = [2, 5, 3.14, 1, -7]
numbers.sort()
print(numbers)
letters = ['a', 'z', 'A', 'Z']
letters.sort(key=str.lower) ## Сортировка без учета регистра
print(letters)
Запустите скрипт:
python3 /home/labex/project/step3_remove.py
Вывод:
[-7, 1, 2, 3.14, 5]
['a', 'A', 'z', 'Z']
Для выполнения задания по верификации вам необходимо создать список, удалить определенный элемент, а затем отсортировать оставшиеся элементы. Замените содержимое step3_remove.py следующим кодом:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
## Удалить элемент 'rack'
furniture.remove('rack')
## Отсортировать список в алфавитном порядке
furniture.sort()
print(furniture)
Запустите скрипт, чтобы увидеть результат:
python3 /home/labex/project/step3_remove.py
Вывод:
['chair', 'shelf', 'table']
После того как ваш скрипт корректно удалит и отсортирует список, нажмите Verify (Проверить).
Циклы и Продвинутые Методы
На этом шаге вы научитесь выполнять итерацию по спискам и использовать некоторые продвинутые, но очень полезные техники работы со списками.
Откройте файл step4_loop.py для этого раздела.
Итерация с помощью цикла for
Цикл for — это стандартный способ перебора элементов в списке.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for item in furniture:
print(item)
Запустите скрипт:
python3 /home/labex/project/step4_loop.py
Вывод:
table
chair
rack
shelf
Получение индекса и значения с помощью enumerate()
Если вам нужен как индекс, так и значение во время итерации, используйте функцию enumerate().
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for index, item in enumerate(furniture):
print(f'index: {index} - item: {item}')
Запустите скрипт:
python3 /home/labex/project/step4_loop.py
Вывод:
index: 0 - item: table
index: 1 - item: chair
index: 2 - item: rack
index: 3 - item: shelf
Операторы in и not in
Эти операторы позволяют проверить, существует ли значение в списке.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
print('rack' in furniture)
print('bed' not in furniture)
Запустите скрипт:
python3 /home/labex/project/step4_loop.py
Вывод:
True
True
Цикл по нескольким спискам с помощью zip()
Функция zip() идеально подходит для параллельной обработки нескольких списков. Она объединяет элементы из каждого списка в пары.
Для выполнения задания по верификации вы будете использовать zip() для объединения двух списков. Замените содержимое step4_loop.py следующим кодом. Он будет перебирать предметы мебели и соответствующие им цены, выводя отформатированную строку для каждой пары.
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
price = [100, 50, 80, 40]
for item, amount in zip(furniture, price):
print(f'The {item} costs ${amount}')
Запустите скрипт, чтобы увидеть объединенный вывод:
python3 /home/labex/project/step4_loop.py
Вывод:
The table costs $100
The chair costs $50
The rack costs $80
The shelf costs $40
Как только ваш скрипт начнет работать правильно, нажмите Verify (Проверить).
Понимание Кортежей (Tuples)
На этом заключительном шаге вы узнаете о типе данных кортеж (tuple). Кортежи похожи на списки, но они неизменяемы (immutable), что означает, что их содержимое не может быть изменено после создания.
Откройте файл step5_tuple.py.
Тип данных Кортеж (Tuple)
Кортежи определяются с помощью круглых скобок () вместо квадратных. Поскольку они неизменяемы, вы не можете изменять, добавлять или удалять элементы после создания кортежа. Это делает их более эффективными с точки зрения памяти и полезными для данных, которые не должны изменяться.
Вы можете получать доступ к элементам кортежа, используя индексы и срезы, точно так же, как и со списками.
## step5_tuple.py
furniture = ('table', 'chair', 'rack', 'shelf')
## Доступ к элементам
print(furniture[0])
## Срезы (Slicing)
print(furniture[1:3])
## Получение длины
print(len(furniture))
Запустите скрипт:
python3 /home/labex/project/step5_tuple.py
Вывод:
table
('chair', 'rack')
4
Если вы попытаетесь изменить кортеж, Python выдаст ошибку TypeError. Например, furniture[0] = 'desk' вызовет ошибку.
Преобразование между list() и tuple()
Вы можете легко преобразовывать данные между списками и кортежами, используя функции-конструкторы list() и tuple().
Для выполнения задания по верификации вам нужно будет преобразовать список в кортеж. Замените содержимое step5_tuple.py следующим кодом:
## step5_tuple.py
## Список элементов
my_list = ['cat', 'dog', 5]
## Преобразование списка в кортеж
my_tuple = tuple(my_list)
print(my_tuple)
Запустите скрипт, чтобы увидеть полученный кортеж:
python3 /home/labex/project/step5_tuple.py
Вывод:
('cat', 'dog', 5)
Вы также можете преобразовать кортеж обратно в список, если вам нужно его изменить:
## step5_tuple.py
my_tuple = ('cat', 'dog', 5)
my_list = list(my_tuple)
print(my_list)
Запустите скрипт:
python3 /home/labex/project/step5_tuple.py
Вывод:
['cat', 'dog', 5]
Как только ваш скрипт успешно преобразует список в кортеж и выведет его, нажмите Verify (Проверить), чтобы завершить лабораторную работу.
Резюме
Поздравляем с завершением лабораторной работы! Вы получили прочное понимание основных структур данных Python: списков (lists) и кортежей (tuples).
Вы научились:
- Создавать списки и получать доступ к элементам, используя положительные и отрицательные индексы.
- Извлекать подсписки с помощью срезов (slicing).
- Изменять списки, заменяя значения, добавляя элементы с помощью
append()иinsert(), и удаляя их с помощьюdel,remove()иpop(). - Сортировать списки на месте (in-place) с помощью метода
sort(). - Эффективно перебирать списки, используя циклы
for,enumerate()иzip(). - Понимать неизменяемую природу кортежей и преобразовывать данные между списками и кортежами.
Эти навыки являются основополагающими для любого программиста на Python и будут бесценны в ваших будущих проектах.



