Списки и Кортежи Python

PythonBeginner
Практиковаться сейчас

Введение

Добро пожаловать в эту практическую лабораторную работу по спискам (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 и будут бесценны в ваших будущих проектах.