Списки в Python представляют собой упорядоченные изменяемые коллекции объектов произвольных типов. Они являются одним из самых гибких и часто используемых типов данных в Python. Рассмотрим подробно создание, использование и взаимодействие списков с различными типами данных.
Создание списков
Пустой список
empty_list = []
Список с элементами
numbers = [1, 2, 3, 4, 5]
strings = ["apple", "banana", "cherry"]
mixed = [1, "apple", 3.14, True]
Обращение к элементам списка
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
Изменение элементов списка
fruits = ["apple", "banana", "cherry"]
fruits[1] = "blueberry"
print(fruits) # ['apple', 'blueberry', 'cherry']
Добавление элементов в список
Метод 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']
Удаление элементов из списка
Метод 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']
Метод clear()
Удаляет все элементы из списка.
fruits = ["apple", "banana", "cherry"]
fruits.clear()
print(fruits) # []
Поиск элементов в списке
Метод index()
Возвращает индекс первого вхождения указанного значения. Вызывает исключение
ValueError
, если значение не найдено.fruits = ["apple", "banana", "cherry"]
index = fruits.index("banana")
print(index) # 1
Метод count()
Возвращает количество вхождений указанного значения.
numbers = [1, 2, 2, 3, 2]
count = numbers.count(2)
print(count) # 3
Сортировка списка
Метод sort()
Сортирует список на месте.
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]
Функция sorted()
Возвращает новый отсортированный список.
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]
Сортировка в обратном порядке
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort(reverse=True)
print(numbers) # [9, 5, 4, 3, 2, 1, 1]
Обращение списка
Метод 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]
Копирование списков
Срез
original = [1, 2, 3]
copy = original[:]
print(copy) # [1, 2, 3]
Метод copy()
original = [1, 2, 3]
copy = original.copy()
print(copy) # [1, 2, 3]
Глубокое копирование
Для глубокого копирования вложенных списков используйте модуль
copy
.import copy
original = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)
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[, start[, end]]) |
Возвращает индекс первого элемента, значение которого равно x . Необязательные аргументы start и end определяют область поиска |
lst.index(3) , lst.index(3, 2, 5) |
count(x) |
Возвращает количество элементов со значением x |
lst.count(3) |
sort(key=None, reverse=False) |
Сортирует список на месте (аргументы могут быть использованы для настройки сортировки) | lst.sort() , lst.sort(reverse=True) , lst.sort(key=len) |
reverse() |
Разворачивает список на месте | lst.reverse() |
copy() |
Возвращает копию списка | lst_copy = lst.copy() |
Списки и различные типы данных
Списки со строками
words = ["hello", "world"]
joined = " ".join(words)
print(joined) # "hello world"
split_words = joined.split()
print(split_words) # ['hello', 'world']
Списки с числами
numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]
print(squares) # [1, 4, 9, 16, 25]
Списки с логическими значениями
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]
]
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}")
Генераторы списков
Простые генераторы списков
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]
Функции и методы для работы со списками
Функция len()
Возвращает длину списка.
numbers = [1, 2, 3, 4, 5]
print(len(numbers)) # 5
Функция sum()
Возвращает сумму элементов списка.
numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # 15
Функция max() и min()
Возвращают соответственно максимальный и минимальный элемент списка.
numbers = [1, 2, 3, 4, 5]
print(max(numbers)) # 5
print(min(numbers)) # 1
Функция zip()
Функция
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()
Функция
map()
применяет заданную функцию к каждому элементу списка.numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x ** 2, numbers))
print(squares) # [1, 4, 9, 16, 25]
Функция filter()
Функция
filter()
создает новый список, содержащий только те элементы исходного списка, для которых заданная функция возвращает True.numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]
Функция reduce()
Функция
reduce()
из модуля functools
применяет заданную функцию к элементам списка, сводя его к единственному значению.from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 120
Поворот списка
def rotate_list(lst, 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]
def rotate_list(lst, k):
n = len(lst)
k = k % n # Для обработки случаев, когда k больше длины списка
rotated = [0] * n
for i in range(n):
rotated[(i + k) % n] = lst[i]
return rotated
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]
Разделение списка на части
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = [numbers[i:i + n] for i in range(0, len(numbers), n)]
print(chunks) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Преобразование списка списков в один список
list_of_lists = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat_list = [item for sublist in list_of_lists for item in sublist]
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]