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

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

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

Начать курс

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

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

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

Пустой список

empty_list = []

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

numbers = [1, 2, 3, 4, 5]
strings = ["apple", "banana", "cherry"]
mixed = [1, "apple", 3.14, True]

Создание списков с помощью конструктора list()

# Создание списка из строки
letters = list("hello")
print(letters)  # ['h', 'e', 'l', 'l', 'o']

# Создание списка из диапазона
numbers = list(range(5))
print(numbers)  # [0, 1, 2, 3, 4]

Обращение к элементам списка

Индексация элементов

fruits = ["apple", "banana", "cherry"]
# Обращение к элементам с начала
print(fruits[0])  # apple
print(fruits[1])  # banana
print(fruits[2])  # cherry

# Обращение к элементам с конца
print(fruits[-1])  # cherry
print(fruits[-2])  # banana
print(fruits[-3])  # apple

Срезы (slicing)

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5])    # [2, 3, 4]
print(numbers[:3])     # [0, 1, 2]
print(numbers[7:])     # [7, 8, 9]
print(numbers[::2])    # [0, 2, 4, 6, 8]
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

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

fruits = ["apple", "banana", "cherry"]
fruits[1] = "blueberry"
print(fruits)  # ['apple', 'blueberry', 'cherry']

# Изменение нескольких элементов через срез
fruits[1:3] = ["orange", "grape"]
print(fruits)  # ['apple', 'orange', 'grape']

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

Метод append()

Добавляет элемент в конец списка.

fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits)  # ['apple', 'banana', 'cherry']

Метод insert()

Вставляет элемент на указанную позицию.

fruits = ["apple", "banana"]
fruits.insert(1, "blueberry")
print(fruits)  # ['apple', 'blueberry', 'banana']

Метод extend()

Расширяет список, добавляя в конец все элементы из переданного итерируемого объекта.

fruits = ["apple", "banana"]
more_fruits = ["cherry", "date"]
fruits.extend(more_fruits)
print(fruits)  # ['apple', 'banana', 'cherry', 'date']

Оператор += для добавления элементов

fruits = ["apple", "banana"]
fruits += ["cherry", "date"]
print(fruits)  # ['apple', 'banana', 'cherry', 'date']

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

Метод remove()

Удаляет первое вхождение указанного значения.

fruits = ["apple", "banana", "cherry"]
fruits.remove("banana")
print(fruits)  # ['apple', 'cherry']

Метод pop()

Удаляет и возвращает элемент по указанному индексу.

fruits = ["apple", "banana", "cherry"]
popped_fruit = fruits.pop(1)
print(popped_fruit)  # banana
print(fruits)  # ['apple', 'cherry']

# Удаление последнего элемента
last_fruit = fruits.pop()
print(last_fruit)  # cherry

Оператор del

fruits = ["apple", "banana", "cherry", "date"]
del fruits[1]      # Удаляет элемент по индексу
del fruits[1:3]    # Удаляет срез
print(fruits)

Метод clear()

Удаляет все элементы из списка.

fruits = ["apple", "banana", "cherry"]
fruits.clear()
print(fruits)  # []

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

Метод index()

Возвращает индекс первого вхождения указанного значения.

fruits = ["apple", "banana", "cherry"]
index = fruits.index("banana")
print(index)  # 1

# Поиск с указанием диапазона
numbers = [1, 2, 3, 2, 4, 2, 5]
index = numbers.index(2, 2, 6)  # Ищет 2 в диапазоне [2:6]
print(index)  # 3

Метод count()

Возвращает количество вхождений указанного значения.

numbers = [1, 2, 2, 3, 2]
count = numbers.count(2)
print(count)  # 3

Оператор in для проверки наличия элемента

fruits = ["apple", "banana", "cherry"]
print("banana" in fruits)     # True
print("orange" not in fruits) # True

Сортировка списка

Метод sort()

Сортирует список на месте.

numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 9]

# Сортировка в обратном порядке
numbers.sort(reverse=True)
print(numbers)  # [9, 5, 4, 3, 2, 1, 1]

# Сортировка строк по длине
words = ["python", "java", "c", "javascript"]
words.sort(key=len)
print(words)  # ['c', 'java', 'python', 'javascript']

Функция sorted()

Возвращает новый отсортированный список.

numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 1, 2, 3, 4, 5, 9]
print(numbers)         # [3, 1, 4, 1, 5, 9, 2] (исходный не изменился)

Обращение списка

Метод reverse()

Изменяет порядок элементов в списке на обратный.

numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.reverse()
print(numbers)  # [2, 9, 5, 1, 4, 1, 3]

Функция reversed()

Возвращает итератор с элементами в обратном порядке.

numbers = [3, 1, 4, 1, 5, 9, 2]
reversed_numbers = list(reversed(numbers))
print(reversed_numbers)  # [2, 9, 5, 1, 4, 1, 3]

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

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

# Метод copy()
original = [1, 2, 3]
copy = original.copy()
print(copy)  # [1, 2, 3]

# Срез
copy = original[:]
print(copy)  # [1, 2, 3]

# Конструктор list()
copy = list(original)
print(copy)  # [1, 2, 3]

Глубокое копирование

Для глубокого копирования вложенных списков используйте модуль copy.

import copy

original = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)
shallow_copy = copy.copy(original)

original[0][0] = 999
print(original)      # [[999, 2, 3], [4, 5, 6]]
print(shallow_copy)  # [[999, 2, 3], [4, 5, 6]]
print(deep_copy)     # [[1, 2, 3], [4, 5, 6]]

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

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

Списки и различные типы данных

Списки со строками

words = ["hello", "world", "python"]
joined = " ".join(words)
print(joined)  # "hello world python"

split_words = joined.split()
print(split_words)  # ['hello', 'world', 'python']

# Сортировка строк
words.sort()
print(words)  # ['hello', 'python', 'world']

Списки с числами

numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]
print(squares)  # [1, 4, 9, 16, 25]

# Математические операции
print(sum(numbers))    # 15
print(max(numbers))    # 5
print(min(numbers))    # 1

Списки с логическими значениями

booleans = [True, False, True]
all_true = all(booleans)
any_true = any(booleans)
print(all_true)  # False
print(any_true)  # True

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

# Двумерный список (матрица)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# Доступ к элементам
print(matrix[0][1])  # 2
print(matrix[2][0])  # 7

# Итерация по матрице
for row in matrix:
    for elem in row:
        print(elem, end=' ')
    print()

Итерирование по спискам

Простое итерирование

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

Итерирование с индексами

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(f"Index {index}: {fruit}")

# Итерирование с range()
for i in range(len(fruits)):
    print(f"Index {i}: {fruits[i]}")

Итерирование по нескольким спискам

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

Генераторы списков (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]

# Сложный генератор
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words if len(word) > 4]
print(uppercase_words)  # ['HELLO', 'WORLD', 'PYTHON']

Вложенные генераторы списков

# Создание матрицы
matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)  # [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

# Преобразование матрицы в плоский список
flat_list = [item for row in matrix for item in row]
print(flat_list)  # [1, 2, 3, 2, 4, 6, 3, 6, 9]

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

Функция len()

numbers = [1, 2, 3, 4, 5]
print(len(numbers))  # 5

Функции sum(), max(), min()

numbers = [1, 2, 3, 4, 5]
print(sum(numbers))  # 15
print(max(numbers))  # 5
print(min(numbers))  # 1

Функция zip()

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
cities = ["New York", "Los Angeles", "Chicago"]

for name, age, city in zip(names, ages, cities):
    print(f"{name} is {age} years old and lives in {city}")

Функция map()

numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x ** 2, numbers))
print(squares)  # [1, 4, 9, 16, 25]

# Применение функции к строкам
words = ["hello", "world"]
upper_words = list(map(str.upper, words))
print(upper_words)  # ['HELLO', 'WORLD']

Функция filter()

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # [2, 4, 6, 8, 10]

# Фильтрация строк
words = ["python", "java", "c", "javascript", "go"]
long_words = list(filter(lambda word: len(word) > 3, words))
print(long_words)  # ['python', 'java', 'javascript']

Функция reduce()

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 120

# Поиск максимума
maximum = reduce(lambda x, y: x if x > y else y, numbers)
print(maximum)  # 5

Полезные операции со списками

Поворот списка

def rotate_list(lst, k):
    """Поворачивает список на k позиций вправо"""
    n = len(lst)
    k = k % n  # Обработка случаев, когда k больше длины списка
    return lst[-k:] + lst[:-k]

numbers = [1, 2, 3, 4, 5]
rotated = rotate_list(numbers, 2)
print(rotated)  # [4, 5, 1, 2, 3]

Удаление дубликатов

# Простой способ (не сохраняет порядок)
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)  # [1, 2, 3, 4, 5]

# Сохранение порядка
def remove_duplicates(lst):
    seen = set()
    result = []
    for item in lst:
        if item not in seen:
            seen.add(item)
            result.append(item)
    return result

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_ordered = remove_duplicates(numbers)
print(unique_ordered)  # [1, 2, 3, 4, 5]

Разделение списка на части

def chunk_list(lst, n):
    """Разделяет список на части размером n"""
    return [lst[i:i + n] for i in range(0, len(lst), n)]

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunks = chunk_list(numbers, 3)
print(chunks)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

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

list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = [3, 2, 1]

print(list1 == list2)  # True
print(list1 == list3)  # False
print(list1 is list2)  # False

# Сравнение содержимого без учета порядка
print(set(list1) == set(list3))  # True

Объединение списков

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

# Различные способы объединения
combined1 = list1 + list2 + list3
combined2 = [*list1, *list2, *list3]
combined3 = []
combined3.extend(list1)
combined3.extend(list2)
combined3.extend(list3)

print(combined1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

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

Выбор между append() и extend()

# Медленнее для добавления нескольких элементов
lst = []
for item in [1, 2, 3, 4, 5]:
    lst.append(item)

# Быстрее для добавления нескольких элементов
lst = []
lst.extend([1, 2, 3, 4, 5])

Использование генераторов списков вместо циклов

# Медленнее
squares = []
for x in range(1000):
    squares.append(x ** 2)

# Быстрее
squares = [x ** 2 for x in range(1000)]

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

 

категории

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