Манипулирование списками в Python

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

Введение

В этой лабораторной работе вы получите практический опыт работы с манипулированием списками (lists) в Python. Списки являются фундаментальной структурой данных для хранения упорядоченных коллекций элементов. Вы научитесь создавать, получать доступ, добавлять, удалять и изменять элементы списка.

Кроме того, эта лабораторная работа проведет вас через более продвинутые операции, такие как сортировка, запросы (querying) и вложение списков (nesting lists). К концу этой лабораторной работы у вас будет прочное понимание того, как эффективно работать со списками для управления и обработки данных в ваших программах на Python.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 100% положительных отзывов от учащихся.

Создание и доступ к спискам

На этом этапе вы узнаете, как создавать списки и получать доступ к их элементам. Списки — это упорядоченные, изменяемые (mutable) коллекции элементов, и они являются одним из наиболее универсальных типов данных в Python.

Списки создаются с использованием квадратных скобок [], элементы разделяются запятыми. Начнем с создания нескольких списков.

В проводнике файлов WebIDE слева найдите и откройте файл list_creation.py, расположенный в каталоге ~/project. Добавьте следующий код в файл:

## Create an empty list
empty_list = []
print("Empty list:", empty_list)
print("Type of empty_list:", type(empty_list))

## Create a list of numbers
numbers = [10, 20, 30, 40, 50]
print("Numbers list:", numbers)

## Lists can contain elements of different data types
mixed_list = [1, 'hello', 3.14, True]
print("Mixed data type list:", mixed_list)

## You can also create a list from another iterable, like a string
string_list = list("python")
print("List from a string:", string_list)

После добавления кода сохраните файл. Чтобы запустить скрипт, откройте интегрированный терминал в WebIDE и выполните следующую команду:

python ~/project/list_creation.py

Вы должны увидеть следующий вывод, демонстрирующий различные способы создания списка:

Empty list: []
Type of empty_list: <class 'list'>
Numbers list: [10, 20, 30, 40, 50]
Mixed data type list: [1, 'hello', 3.14, True]
List from a string: ['p', 'y', 't', 'h', 'o', 'n']

Далее давайте рассмотрим, как получать доступ к элементам внутри списка. Вы можете получать доступ к элементам по их индексу (позиции). Индексация списка начинается с 0. Вы также можете использовать отрицательные индексы, где -1 ссылается на последний элемент.

Срезы (Slicing) позволяют получать доступ к диапазону элементов. Синтаксис: list[start:stop:step].

Добавьте следующий код в конец вашего файла list_creation.py:

## Accessing list elements
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi']
print("\n--- Accessing Elements ---")
print("Fruits list:", fruits)

## Access the first element (index 0)
print("First element:", fruits[0])

## Access the last element (index -1)
print("Last element:", fruits[-1])

## Slicing: get elements from index 1 up to (but not including) index 4
print("Slice [1:4]:", fruits[1:4])

## Slicing: get all elements from the beginning up to index 3
print("Slice [:3]:", fruits[:3])

## Slicing: get all elements from index 2 to the end
print("Slice [2:]:", fruits[2:])

## Slicing: get a copy of the entire list
print("Slice [:] (a copy):", fruits[:])

## Slicing with a step: get every second element
print("Slice [::2]:", fruits[::2])

## Slicing to reverse the list
print("Reversed list [::-1]:", fruits[::-1])

Сохраните файл и снова запустите скрипт из терминала:

python ~/project/list_creation.py

Обратите внимание на новый вывод, чтобы понять, как работают индексация и срезы:

Empty list: []
Type of empty_list: <class 'list'>
Numbers list: [10, 20, 30, 40, 50]
Mixed data type list: [1, 'hello', 3.14, True]
List from a string: ['p', 'y', 't', 'h', 'o', 'n']

--- Accessing Elements ---
Fruits list: ['orange', 'apple', 'pear', 'banana', 'kiwi']
First element: orange
Last element: kiwi
Slice [1:4]: ['apple', 'pear', 'banana']
Slice [:3]: ['orange', 'apple', 'pear']
Slice [2:]: ['pear', 'banana', 'kiwi']
Slice [:] (a copy): ['orange', 'apple', 'pear', 'banana', 'kiwi']
Slice [::2]: ['orange', 'pear', 'kiwi']
Reversed list [::-1]: ['kiwi', 'banana', 'pear', 'apple', 'orange']

Теперь вы узнали, как создавать списки и получать доступ к их содержимому.

Изменение списков: добавление, удаление и изменение элементов

На этом этапе вы узнаете, как изменять списки. Поскольку списки являются изменяемыми (mutable), вы можете добавлять, удалять или изменять их элементы после их создания.

Сначала сосредоточимся на добавлении элементов. Python предоставляет несколько методов:

  • append(): Добавляет один элемент в конец списка.
  • extend(): Добавляет все элементы из итерируемого объекта (например, другого списка) в конец.
  • insert(): Добавляет элемент по указанному индексу.

Откройте файл list_modification.py в проводнике файлов WebIDE. Добавьте в него следующий код:

## --- Adding Elements ---
my_list = [1, 2, 3]
print("Original list:", my_list)

## Add an element using append()
my_list.append(4)
print("After append(4):", my_list)

## Add multiple elements using extend()
my_list.extend([5, 6])
print("After extend([5, 6]):", my_list)

## Insert an element at a specific position
my_list.insert(1, 1.5) ## Insert 1.5 at index 1
print("After insert(1, 1.5):", my_list)

Сохраните файл и запустите его из терминала:

python ~/project/list_modification.py

Ваш вывод должен показать, как список растет с каждой операцией:

Original list: [1, 2, 3]
After append(4): [1, 2, 3, 4]
After extend([5, 6]): [1, 2, 3, 4, 5, 6]
After insert(1, 1.5): [1, 1.5, 2, 3, 4, 5, 6]

Далее давайте попрактикуемся в удалении элементов. Основные методы включают:

  • remove(): Удаляет первое вхождение указанного значения.
  • pop(): Удаляет и возвращает элемент по заданному индексу (или последний элемент, если индекс не указан).
  • del: Инструкция для удаления элемента или среза по индексу.
  • clear(): Удаляет все элементы из списка.

Добавьте следующий код в конец list_modification.py:

## --- Removing Elements ---
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple']
print("\n--- Removing Elements ---")
print("Original fruits list:", fruits)

## Remove the last element using pop()
popped_item = fruits.pop()
print("After pop():", fruits)
print("Popped item:", popped_item)

## Remove an element by its value using remove()
fruits.remove('pear')
print("After remove('pear'):", fruits)

## Remove an element by its index using del
del fruits[1] ## Deletes 'apple' at index 1
print("After del fruits[1]:", fruits)

## Clear all elements from the list
fruits.clear()
print("After clear():", fruits)

Наконец, вы можете изменять существующие элементы, присваивая новое значение индексу или срезу. Добавьте этот последний блок кода в list_modification.py:

## --- Changing Elements ---
letters = ['a', 'b', 'c', 'd', 'e']
print("\n--- Changing Elements ---")
print("Original letters list:", letters)

## Change a single element
letters[0] = 'A'
print("After changing index 0:", letters)

## Change a slice of elements
letters[1:3] = ['B', 'C']
print("After changing slice [1:3]:", letters)

Сохраните файл и запустите скрипт еще раз:

python ~/project/list_modification.py

Полный вывод продемонстрирует все изученные вами методы модификации:

Original list: [1, 2, 3]
After append(4): [1, 2, 3, 4]
After extend([5, 6]): [1, 2, 3, 4, 5, 6]
After insert(1, 1.5): [1, 1.5, 2, 3, 4, 5, 6]

--- Removing Elements ---
Original fruits list: ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple']
After pop(): ['orange', 'apple', 'pear', 'banana', 'kiwi']
Popped item: apple
After remove('pear'): ['orange', 'apple', 'banana', 'kiwi']
After del fruits[1]: ['orange', 'banana', 'kiwi']
After clear(): []

--- Changing Elements ---
Original letters list: ['a', 'b', 'c', 'd', 'e']
After changing index 0: ['A', 'b', 'c', 'd', 'e']
After changing slice [1:3]: ['A', 'B', 'C', 'd', 'e']

Теперь вы освоили добавление, удаление и изменение элементов в списке Python.

Расширенные операции со списками: сортировка, запросы и вложенность

На этом заключительном этапе вы изучите более продвинутые операции со списками, включая сортировку, получение информации (запросы) и работу с вложенными списками.

Начнем с сортировки. Метод sort() изменяет список на месте (in-place). Вы можете сортировать по возрастанию или по убыванию.

Откройте файл list_operations.py в WebIDE. Добавьте следующий код для демонстрации сортировки:

## --- Sorting Lists ---
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
print("--- Sorting Lists ---")
print("Original numbers list:", numbers)

## Sort the list in-place (ascending)
numbers.sort()
print("After sort():", numbers)

## Sort the list in descending order
numbers.sort(reverse=True)
print("After sort(reverse=True):", numbers)

## The reverse() method simply reverses the order, it does not sort
letters = ['a', 'b', 'c', 'd']
print("\nOriginal letters list:", letters)
letters.reverse()
print("After reverse():", letters)

Сохраните файл и запустите его из терминала:

python ~/project/list_operations.py

Вывод покажет отсортированные и обращенные списки:

--- Sorting Lists ---
Original numbers list: [3, 1, 4, 1, 5, 9, 2, 6]
After sort(): [1, 1, 2, 3, 4, 5, 6, 9]
After sort(reverse=True): [9, 6, 5, 4, 3, 2, 1, 1]

Original letters list: ['a', 'b', 'c', 'd']
After reverse(): ['d', 'c', 'b', 'a']

Далее давайте выполним запросы к списку для поиска информации.

  • count(): Возвращает количество вхождений заданного значения.
  • index(): Возвращает индекс первого вхождения значения.

Добавьте следующий код в list_operations.py:

## --- Querying Lists ---
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
print("\n--- Querying Lists ---")
print("Fruits list:", fruits)

## Count the occurrences of an element
apple_count = fruits.count('apple')
print("Count of 'apple':", apple_count)

## Find the index of the first occurrence of an element
banana_index = fruits.index('banana')
print("Index of first 'banana':", banana_index)

Наконец, рассмотрим вложенные списки (nested lists). Вложенный список — это список, который содержит другие списки в качестве своих элементов. Это полезно для создания двумерных (2D) структур, таких как матрица или сетка.

Добавьте этот последний блок кода в list_operations.py:

## --- Nested Lists ---
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print("\n--- Nested Lists ---")
print("Matrix:", matrix)

## Access an entire inner list (a row)
first_row = matrix[0]
print("First row:", first_row)

## Access a specific element in the nested list
## To get the element '6', we access row 1, then column 2
element = matrix[1][2]
print("Element at matrix[1][2]:", element)

Сохраните файл и запустите скрипт в последний раз:

python ~/project/list_operations.py

Полный вывод продемонстрирует сортировку, запросы и доступ к вложенным спискам:

--- Sorting Lists ---
Original numbers list: [3, 1, 4, 1, 5, 9, 2, 6]
After sort(): [1, 1, 2, 3, 4, 5, 6, 9]
After sort(reverse=True): [9, 6, 5, 4, 3, 2, 1, 1]

Original letters list: ['a', 'b', 'c', 'd']
After reverse(): ['d', 'c', 'b', 'a']

--- Querying Lists ---
Fruits list: ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
Count of 'apple': 2
Index of first 'banana': 3

--- Nested Lists ---
Matrix: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
First row: [1, 2, 3]
Element at matrix[1][2]: 6

Теперь вы в совершенстве овладели несколькими продвинутыми методами работы со списками Python.

Резюме

В этой лабораторной работе вы изучили основы манипулирования списками в Python. Вы начали с создания списков с использованием квадратных скобок [] и конструктора list(). Вы практиковались в доступе к элементам списка с помощью индексации и срезов (slicing), что необходимо для извлечения определенных элементов или подмножеств списка.

Затем вы изучили, как изменять списки: добавлять элементы с помощью append(), extend() и insert(), удалять элементы с помощью remove(), pop() и del, а также изменять элементы через присваивание по индексу и срезу. Наконец, вы рассмотрели продвинутые операции, включая сортировку на месте (in-place sorting) с помощью sort(), обращение порядка с помощью reverse(), получение информации (запросы) с помощью count() и index(), а также структурирование данных с помощью вложенных списков. Теперь вы хорошо подготовлены к эффективному использованию списков в ваших проектах на Python.