Python списки: создание, методы, примеры

Раздел: Python -> Коллекции и структуры данных

Основная структура данных: список (list)

Список в Python - это встроенный изменяемый тип данных, представляющий упорядоченную последовательность элементов. Элементы могут быть любого типа, включая другие списки. Основные преимущества: быстрый доступ по индексу (O(1)) и эффективное добавление/удаление в конце (амортизированное O(1)).

# Создание пустого списка
empty = []
# Создание списка с элементами
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'строка', 3.14, True]

структура данных список python (структура данных список в python)

Список поддерживает индексацию, срезы, итерацию, методы для модификации.

Как создать список разными способами?

Список можно создать не только с помощью квадратных скобок, но и через функцию list(), которая преобразует любой итерируемый объект в список.

# Из строки
list('hello')  # ['h', 'e', 'l', 'l', 'o']
# Из диапазона
list(range(5))  # [0, 1, 2, 3, 4]
# Из кортежа
list((10, 20, 30))  # [10, 20, 30]

Проблема: Если передать не итерируемый объект (например, число), возникнет TypeError. Всегда проверяйте тип аргумента.

Как добавить элемент в список?

Метод append() добавляет один элемент в конец. Для добавления нескольких элементов используется extend() или оператор +=. Метод insert() вставляет элемент по указанному индексу.

nums = [1, 2, 3]
nums.append(4)          # [1, 2, 3, 4]
nums.extend([5, 6])     # [1, 2, 3, 4, 5, 6]
nums.insert(0, 0)       # [0, 1, 2, 3, 4, 5, 6]

Типичная ошибка: Использование append() для добавления нескольких элементов: nums.append([5,6]) добавит список как один элемент, а не отдельные числа. Используйте extend() или цикл.

Как удалить элемент из списка?

Метод pop() удаляет элемент по индексу и возвращает его. Метод remove() удаляет первый найденный элемент по значению. Оператор del удаляет элемент или срез. Метод clear() очищает весь список.

nums = [10, 20, 30, 20]
val = nums.pop(1)       # val = 20, nums = [10, 30, 20]
nums.remove(20)         # удаляет первое вхождение 20, nums = [10, 30]
del nums[0]             # nums = [30]
nums.clear()            # nums = []

Ошибка: remove() вызывает ValueError, если элемент не найден. Сначала проверяйте наличие с помощью in.

Как отсортировать список?

Метод sort() сортирует список на месте (изменяет исходный). Функция sorted() возвращает новый отсортированный список. Обе поддерживают параметр reverse=True и key для пользовательской сортировки.

nums = [3, 1, 2]
nums.sort()               # nums = [1, 2, 3]
sorted_nums = sorted([3,1,2])  # [1, 2, 3], исходный не изменился
# Сортировка по длине строк
words = ['aa', 'b', 'ccc']
words.sort(key=len)       # ['b', 'aa', 'ccc']

Проблема: Если список содержит элементы разных несравнимых типов (например, числа и строки), сортировка вызовет TypeError. Убедитесь, что все элементы имеют одинаковый тип или предоставьте функцию key.

Как скопировать список без ссылки на оригинал?

Простое присваивание (new = old) не создаёт копию, а только новый ссылку. Для поверхностной копии используйте срез [:], метод copy() или функцию list(). Для глубокого копирования вложенных списков применяйте copy.deepcopy().

original = [1, [2, 3]]
shallow = original.copy()
shallow[1][0] = 99       # изменяет и original, так как внутренний список общий
import copy
deep = copy.deepcopy(original)
deep[1][0] = 0            # original не изменился

Ошибка: Использование [:] или copy() для вложенных списков не создаёт независимые внутренние объекты. Только глубокое копирование решает эту проблему.

Пример
# 1. Создание списка списков (матрицы) с помощью спискового включения
matrix = [[i + j for j in range(3)] for i in range(3)]
print(matrix)
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Пример
# 2. Фильтрация с условием и преобразованием
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)
[4, 16, 36]
Пример
# 3. Сортировка по нескольким ключам (сначала длина, затем алфавит)
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
words.sort(key=lambda w: (len(w), w))
print(words)
['date', 'apple', 'banana', 'cherry', 'elderberry']
Пример
# 4. Использование map и list для преобразования типов
str_nums = ['1', '2', '3']
int_nums = list(map(int, str_nums))
print(int_nums)
[1, 2, 3]
Пример
# 5. Разворот списка с помощью среза
nums = [10, 20, 30, 40]
reversed_nums = nums[::-1]
print(reversed_nums)
[40, 30, 20, 10]
Пример
# 6. Поиск индексов всех вхождений элемента
items = ['a', 'b', 'a', 'c', 'a']
indices = [idx for idx, val in enumerate(items) if val == 'a']
print(indices)
[0, 2, 4]
Пример
# 7. Изменение элементов по условию с использованием enumerate
numbers = [1, 2, 3, 4, 5]
for i, val in enumerate(numbers):
    if val % 2 == 0:
        numbers[i] = val * 10
print(numbers)
[1, 20, 3, 40, 5]
Пример
# 8. Слияние двух списков с чередованием (zip и flatten)
a = [1, 2, 3]
b = ['x', 'y', 'z']
merged = [val for pair in zip(a, b) for val in pair]
print(merged)
[1, 'x', 2, 'y', 3, 'z']
Пример
# 9. Список с уникальными элементами (сохраняя порядок)
items = [1, 2, 2, 3, 1, 4]
seen = set()
unique = []
for item in items:
    if item not in seen:
        seen.add(item)
        unique.append(item)
print(unique)
[1, 2, 3, 4]

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

Структура данных список в Python - comments

En
структура данных список python (python)