Обзор списков (list) в Python: создание, методы и использование для хранения коллекций данных

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

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

Основы работы со списками

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

Для создания списка в Python используются квадратные скобки [], внутри которых элементы разделяются запятыми:

# Создание пустого списка
empty_list = []

# Создание списка с элементами разных типов
my_list = [1, 2, 3, 'apple', 'banana', True]

# Создание списка с помощью конструктора list()
numbers = list(range(5))  # [0, 1, 2, 3, 4]

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

Элементы списка индексируются начиная с нуля. Для доступа к элементам используются квадратные скобки с указанием индекса:

my_list = [1, 2, 3, 'apple', 'banana', True]

print(my_list[0])   # Вывод: 1
print(my_list[3])   # Вывод: 'apple'
print(my_list[-1])  # Вывод: True (последний элемент)
print(my_list[-2])  # Вывод: 'banana' (предпоследний элемент)

Изменение элементов списка

Поскольку списки изменяемы, можно легко модифицировать их элементы:

my_list = [1, 2, 3, 'apple', 'banana', True]
my_list[1] = 'orange'
print(my_list)  # Вывод: [1, 'orange', 3, 'apple', 'banana', True]

Срезы списка (slicing)

Срезы позволяют получить подсписок из исходного списка:

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(my_list[1:4])     # Вывод: [1, 2, 3]
print(my_list[:5])      # Вывод: [0, 1, 2, 3, 4]
print(my_list[3:])      # Вывод: [3, 4, 5, 6, 7, 8, 9]
print(my_list[::2])     # Вывод: [0, 2, 4, 6, 8]
print(my_list[::-1])    # Вывод: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Методы работы со списками

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

append() - добавляет элемент в конец списка:

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # Вывод: [1, 2, 3, 4]

extend() - расширяет список, добавляя элементы из итерируемого объекта:

my_list = [1, 2, 3]
my_list.extend([4, 5, 6])
print(my_list)  # Вывод: [1, 2, 3, 4, 5, 6]

insert() - вставляет элемент в указанную позицию:

my_list = [1, 2, 3]
my_list.insert(1, 'a')
print(my_list)  # Вывод: [1, 'a', 2, 3]

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

remove() - удаляет первое вхождение указанного элемента:

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

pop() - удаляет и возвращает элемент по указанному индексу:

my_list = [1, 2, 3]
popped_item = my_list.pop(1)
print(popped_item)  # Вывод: 2
print(my_list)      # Вывод: [1, 3]

clear() - удаляет все элементы из списка:

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

del - удаляет элемент по индексу или весь список:

my_list = [1, 2, 3, 4, 5]
del my_list[0]
print(my_list)  # Вывод: [2, 3, 4, 5]

Поиск и подсчет элементов

index() - возвращает индекс первого вхождения элемента:

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

count() - возвращает количество вхождений элемента:

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

in - оператор проверки на вхождение элемента:

my_list = [1, 2, 3]
print(2 in my_list)     # Вывод: True
print(5 in my_list)     # Вывод: False

Сортировка и изменение порядка

sort() - сортирует элементы списка на месте:

my_list = [3, 1, 4, 1, 5]
my_list.sort()
print(my_list)  # Вывод: [1, 1, 3, 4, 5]

# Сортировка по убыванию
my_list.sort(reverse=True)
print(my_list)  # Вывод: [5, 4, 3, 1, 1]

reverse() - обращает порядок элементов:

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

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

copy() - создает поверхностную копию списка:

my_list = [1, 2, 3]
new_list = my_list.copy()
print(new_list)  # Вывод: [1, 2, 3]

Итерация по списку

Существует несколько способов перебора элементов списка:

my_list = ['apple', 'banana', 'cherry']

# Простая итерация
for item in my_list:
    print(item)

# Итерация с индексами
for i, item in enumerate(my_list):
    print(f"Индекс {i}: {item}")

# Итерация по индексам
for i in range(len(my_list)):
    print(f"my_list[{i}] = {my_list[i]}")

Полезные функции для работы со списками

my_list = [1, 5, 3, 9, 2]

print(len(my_list))    # Длина списка: 5
print(max(my_list))    # Максимальный элемент: 9
print(min(my_list))    # Минимальный элемент: 1
print(sum(my_list))    # Сумма элементов: 20
print(sorted(my_list)) # Отсортированная копия: [1, 2, 3, 5, 9]

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

Списочные выражения позволяют создавать списки более компактно:

# Создание списка квадратов чисел от 0 до 9
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# Фильтрация четных чисел
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

# Преобразование строк в верхний регистр
words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words)  # ['HELLO', 'WORLD', 'PYTHON']

Двумерные списки (матрицы)

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

Создание двумерных списков

# Создание двумерного списка 3x3
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

# Создание матрицы с помощью генератора списков
matrix = [[0 for j in range(3)] for i in range(3)]

# Создание матрицы с помощью умножения (осторожно!)
# Неправильный способ:
wrong_matrix = [[0] * 3] * 3  # Все строки ссылаются на один объект

# Правильный способ:
correct_matrix = [[0] * 3 for _ in range(3)]

Доступ к элементам двумерного списка

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

print(matrix[0][0])  # Вывод: 1 (первая строка, первый столбец)
print(matrix[1][2])  # Вывод: 6 (вторая строка, третий столбец)
print(matrix[2][1])  # Вывод: 8 (третья строка, второй столбец)

Изменение элементов двумерного списка

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

matrix[0][0] = 10
print(matrix)  # [[10, 2, 3], [4, 5, 6], [7, 8, 9]]

Итерация по двумерному списку

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

# Обход всех элементов
for row in matrix:
    for element in row:
        print(element, end=' ')
    print()  # Переход на новую строку

# Обход с индексами
for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        print(f"matrix[{i}][{j}] = {matrix[i][j]}")

Операции с двумерными списками

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

# Вычисление суммы всех элементов
total_sum = sum(sum(row) for row in matrix)
print(total_sum)  # 45

# Транспонирование матрицы
transposed = [[matrix[j][i] for j in range(len(matrix))] 
              for i in range(len(matrix[0]))]
print(transposed)  # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

# Поиск максимального элемента
max_element = max(max(row) for row in matrix)
print(max_element)  # 9

Многомерные списки

Многомерные списки могут иметь более сложную структуру с различными уровнями вложенности:

# Трёхмерный список
three_d_list = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

# Доступ к элементам
print(three_d_list[0][1][0])  # Вывод: 3
print(three_d_list[1][0][1])  # Вывод: 6

# Неоднородный многомерный список
multi_dim_list = [[1, 2, [3, 4]], [5, [6, 7], 8], [9, 10, 11]]
print(multi_dim_list[0][2][1])  # Вывод: 4
print(multi_dim_list[1][1][0])  # Вывод: 6

Практические примеры использования

Работа с данными

# Список учеников и их оценок
students = [
    ['Иван', [5, 4, 5, 3]],
    ['Мария', [4, 5, 5, 4]],
    ['Петр', [3, 3, 4, 3]]
]

# Вычисление средней оценки для каждого ученика
for student in students:
    name, grades = student
    average = sum(grades) / len(grades)
    print(f"{name}: {average:.2f}")

Игровое поле

# Создание игрового поля для крестиков-ноликов
board = [[' ' for _ in range(3)] for _ in range(3)]

# Размещение символов
board[0][0] = 'X'
board[1][1] = 'O'
board[2][2] = 'X'

# Отображение поля
for row in board:
    print('|'.join(row))
    print('-' * 5)

Оптимизация работы со списками

Производительность операций

# Эффективное добавление элементов в конец
my_list = []
for i in range(1000):
    my_list.append(i)  # O(1) операция

# Неэффективное добавление в начало
my_list = []
for i in range(1000):
    my_list.insert(0, i)  # O(n) операция

# Эффективное объединение списков
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list1 + list2  # Создаёт новый список
# или
list1.extend(list2)  # Модифицирует существующий список

Экономия памяти

# Генераторы для больших объёмов данных
def number_generator(n):
    for i in range(n):
        yield i * i

# Использование генератора вместо списка
squares = (x*x for x in range(1000000))  # Ленивое вычисление

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

таблица всех основных методов списков в питоне:

Метод Синтаксис Описание Пример
append() list.append(item) Добавляет элемент в конец списка [1, 2].append(3)[1, 2, 3]
insert() list.insert(index, item) Вставляет элемент по указанному индексу [1, 3].insert(1, 2)[1, 2, 3]
extend() list.extend(iterable) Добавляет все элементы из итерируемого объекта [1, 2].extend([3, 4])[1, 2, 3, 4]
remove() list.remove(item) Удаляет первое вхождение элемента [1, 2, 2, 3].remove(2)[1, 2, 3]
pop() list.pop([index]) Удаляет и возвращает элемент по индексу (по умолчанию последний) [1, 2, 3].pop()3, список: [1, 2]
clear() list.clear() Удаляет все элементы из списка [1, 2, 3].clear()[]
index() list.index(item, [start, end]) Возвращает индекс первого вхождения элемента [1, 2, 3].index(2)1
count() list.count(item) Возвращает количество вхождений элемента [1, 2, 2, 3].count(2)2
sort() list.sort([key], [reverse]) Сортирует список на месте [3, 1, 2].sort()[1, 2, 3]
reverse() list.reverse() Разворачивает список на месте [1, 2, 3].reverse()[3, 2, 1]
copy() list.copy() Создает поверхностную копию списка [1, 2, 3].copy()[1, 2, 3]

Дополнительные операции (не методы, но важные):

Операция Синтаксис Описание Пример
len() len(list) Возвращает длину списка len([1, 2, 3])3
max() max(list) Возвращает максимальный элемент max([1, 3, 2])3
min() min(list) Возвращает минимальный элемент min([1, 3, 2])1
sum() sum(list) Возвращает сумму элементов sum([1, 2, 3])6
sorted() sorted(list) Возвращает новый отсортированный список sorted([3, 1, 2])[1, 2, 3]
reversed() reversed(list) Возвращает итератор в обратном порядке list(reversed([1, 2, 3]))[3, 2, 1]

Примечания:

  • Методы с modify изменяют исходный список
  • Методы с return возвращают новый объект, не изменяя исходный
  • При использовании remove() и index() может возникнуть ValueError, если элемент не найден
  • pop() может вызвать IndexError при попытке удаления из пустого списка
 

категории

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы
  • Общая база питона