Работа со списками в Python

Списки в Python — это один из самых гибких и широко используемых типов данных. Они позволяют хранить упорядоченные коллекции элементов, которые могут быть разного типа. Давайте рассмотрим работу со списками более подробно.

Создание списков

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

# Пустой список
empty_list = []

# Список с элементами
numbers = [1, 2, 3, 4, 5]
mixed_list = [1, "hello", 3.14, True]
nested_list = [1, [2, 3], ["a", "b"]]

Доступ к элементам

Элементы списка доступны по индексу, начиная с 0.

numbers = [10, 20, 30, 40, 50]

print(numbers[0])  # Вывод: 10
print(numbers[2])  # Вывод: 30

# Отрицательные индексы для доступа к элементам с конца списка
print(numbers[-1])  # Вывод: 50
print(numbers[-3])  # Вывод: 30

Изменение элементов

Элементы списка можно изменять по индексу.

numbers = [10, 20, 30, 40, 50]
numbers[2] = 35
print(numbers)  # Вывод: [10, 20, 35, 40, 50]

Добавление и удаление элементов

Добавление элементов:

numbers = [1, 2, 3]

# Добавление элемента в конец списка
numbers.append(4)
print(numbers)  # Вывод: [1, 2, 3, 4]

# Вставка элемента на определенную позицию
numbers.insert(1, 1.5)
print(numbers)  # Вывод: [1, 1.5, 2, 3, 4]

Удаление элементов:

numbers = [1, 2, 3, 4, 5]

# Удаление элемента по значению
numbers.remove(3)
print(numbers)  # Вывод: [1, 2, 4, 5]

# Удаление элемента по индексу и получение его значения
removed_element = numbers.pop(1)
print(removed_element)  # Вывод: 2
print(numbers)  # Вывод: [1, 4, 5]

# Удаление всех элементов
numbers.clear()
print(numbers)  # Вывод: []

Срезы (slicing)

Срезы позволяют извлекать части списка.

numbers = [1, 2, 3, 4, 5]

# Срез с начала до определенного индекса
print(numbers[:3])  # Вывод: [1, 2, 3]

# Срез от определенного индекса до конца
print(numbers[2:])  # Вывод: [3, 4, 5]

# Срез с определенного индекса до другого индекса
print(numbers[1:4])  # Вывод: [2, 3, 4]

# Срез с шагом
print(numbers[::2])  # Вывод: [1, 3, 5]

# Изменение части списка с помощью срезов
numbers[1:3] = [10, 20]
print(numbers)  # Вывод: [1, 10, 20, 4, 5]

Методы списка

  • append(x): Добавляет элемент x в конец списка.

    numbers = [1, 2, 3]
    numbers.append(4)
    print(numbers)  # Вывод: [1, 2, 3, 4]
  • extend(iterable): Расширяет список, добавляя элементы из итератора iterable.

    numbers = [1, 2, 3]
    numbers.extend([4, 5])
    print(numbers)  # Вывод: [1, 2, 3, 4, 5]
  • insert(i, x): Вставляет элемент x на позицию i.

    numbers = [1, 2, 3]
    numbers.insert(1, 1.5)
    print(numbers)  # Вывод: [1, 1.5, 2, 3]
  • remove(x): Удаляет первый элемент, равный x.

    numbers = [1, 2, 3, 2]
    numbers.remove(2)
    print(numbers)  # Вывод: [1, 3, 2]
  • pop([i]): Удаляет элемент по индексу i и возвращает его. Если индекс не указан, удаляется и возвращается последний элемент.

    numbers = [1, 2, 3]
    last_element = numbers.pop()
    print(last_element)  # Вывод: 3
    print(numbers)  # Вывод: [1, 2]
  • index(x[, start[, end]]): Возвращает индекс первого вхождения элемента x в диапазоне [start, end]. Если элемент не найден, возникает исключение ValueError.

    numbers = [1, 2, 3, 2]
    index = numbers.index(2)
    print(index)  # Вывод: 1
  • count(x): Возвращает количество вхождений элемента x в списке.

    numbers = [1, 2, 3, 2, 2]
    count = numbers.count(2)
    print(count)  # Вывод: 3
  • sort(key=None, reverse=False): Сортирует элементы списка на месте.

    numbers = [4, 1, 3, 2]
    numbers.sort()
    print(numbers)  # Вывод: [1, 2, 3, 4]
    
    # Сортировка в обратном порядке
    numbers.sort(reverse=True)
    print(numbers)  # Вывод: [4, 3, 2, 1]
  • reverse(): Изменяет порядок элементов списка на противоположный.

    numbers = [1, 2, 3]
    numbers.reverse()
    print(numbers)  # Вывод: [3, 2, 1]

Копирование списков

Копирование с помощью срезов:

numbers = [1, 2, 3]
numbers_copy = numbers[:]
print(numbers_copy)  # Вывод: [1, 2, 3]

Копирование с помощью функции list():

numbers = [1, 2, 3]
numbers_copy = list(numbers)
print(numbers_copy)  # Вывод: [1, 2, 3]

Глубокое копирование с помощью модуля copy:

Если список содержит вложенные списки или объекты, для создания независимой копии используйте copy.deepcopy().

import copy

original = [[1, 2], [3, 4]]
copied = copy.deepcopy(original)

Списковые выражения (List Comprehensions)

Списковые выражения позволяют создавать новые списки на основе существующих с помощью компактного синтаксиса.

Простой пример:

squares = [x ** 2 for x in range(10)]
print(squares)  # Вывод: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

С условием:

even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)  # Вывод: [0, 4, 16, 36, 64]

Вложенные списковые выражения:

matrix = [[1, 2, 3], [4, 5, 6]]
flattened = [num for row in matrix for num in row]
print(flattened)  # Вывод: [1, 2, 3, 4, 5, 6]

Перебор элементов списка

Цикл for:

numbers = [1, 2, 3, 4, 5]

for number in numbers:
    print(number)

Функция enumerate():

numbers = [10, 20, 30]

for index, value in enumerate(numbers):
    print(f"Index {index}: {value}")

Слияние и повторение списков

Слияние списков:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined)  # Вывод: [1, 2, 3, 4, 5, 6]

Повторение списка:

numbers = [1, 2, 3]
repeated = numbers * 3
print(repeated)  # Вывод: [1, 2, 3, 1, 2, 3, 1, 2, 3]

Работа со списками в Python включает множество полезных операций и методов, которые позволяют эффективно управлять данными. Практика с этими операциями поможет вам лучше понимать, как использовать списки в реальных задачах программирования.

Last updated