Python. Все что нужно знать о списках.
Списки — это одна из основных структур данных в Python, предназначенная для хранения последовательности элементов. В большинстве языков программирования эта структура данных называется массивом. Благодаря своей гибкости и простоте, списки широко используются в Python для решения разнообразных задач: от хранения данных до реализации сложных алгоритмов. В этой статье мы рассмотрим основные операции со списками, их методы и примеры использования.
Способы создания
numbers = [2, 4, 6, 8, 10]
Элементы могут быть любого типа, например, строками:
languages = ['Python', 'C#', 'C++', 'Java']
Для создания пустого списка используют пустые квадратные скобки или функцию list:
emptylist = [] emptylist = list()
Функцией list можно преобразовать последовательность в список. Например:
numbers = list(range(5)) print(numbers) # Выводит [0, 1, 2, 3, 4]
Основные операции
Списки очень похожи на строки (почитать о них можно здесь). Не удивительно, ведь и строки, и списки – это, по сути, последовательность элементов. Но для строк – это всегда последовательность символов, а элементы списка могут иметь произвольный тип.
Для получения количества элементов в списке используется функция len:
print(len([2, 4, 6, 8])) # Выводит 4
Как и в строках, можно определить наличие элемента в списке с помощью оператора in:
print(5 in [2, 4, 6, 8]) # False print(4 in [2, 4, 6, 8]) # True
Можно использовать логическое отрицание, если требуется проверить отсутствие элемента в списке:
print(5 not in [2, 4, 6, 8]) # True
Для списков работает индексация, причем точно таким же образом, как для строк. То есть отсчет начинается с 0 и можно использовать отрицательный индекс для отсчета с конца списка.
mylist = [2, 4, 6, 8] print(mylist[2]) # Выводит 6 print(mylist[-1]) # Выводит 8
Срезы работают так же, как в строках:
mylist = [2, 4, 6, 8] print(mylist[1:3]) # Выводит [4, 6]
Чтобы перебрать элементы списка, можно выполнить цикл for по списку без применения функции range:
mylist = ["One", "Two", "Three", "Four"] for item in mylist: print(item)
Этот код выводит каждый элемент списка в отдельной строке.
Но есть и отличия от строк. Например, в Python строки являются неизменяемыми. Это значит, что при попытке изменить символ в строке, возникнет ошибка:
message = "hello, World!" message[0] = "H" # Так нельзя. Будет ошибка "object does not support item assignment"
А вот элементы списка изменять можно:
mylist = [1, 3, 5, 7, 9] mylist[2] = 0 print(mylist) # Выводит [1, 3, 0, 7, 9]
Причем можно менять целый диапазон элементов с помощью срезов:
mylist = [1, 3, 5, 7, 9] mylist[2:] = [0, -1, -2] print(mylist) # Выводит [1, 3, 0, -1, -2]
Для списков работают операции сложения и умножения. Операция сложения из элементов двух списков формирует один список:
print([1, 2, 3, 4] + [5, 6, 7, 8]) # Выводит [1, 2, 3, 4, 5, 6, 7, 8]
Умножение выполняет повторение элементов списка заданное количество раз:
print([7, 8] * 3) # Выводит [7, 8, 7, 8, 7, 8] print([0] * 10) # Выводит [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
В Python доступны встроенные функции для работы со списками. Для получения суммы всех элементов списка есть функция sum:
sum([2, 4, 6, 8]) # Выводит 20
Для поиска минимального и максимального значения среди элементов, используют функции min и max:
min([4, 2, 8, 6]) # Выводит 2. Минимальный элемент списка max([4, 2, 8, 6]) # Выводит 8. Максимальный элемент списка
В список можно добавлять элементы с помощью методов append и extend. Метод append добавляет один элемент в конец списка:
mylist = [1, 2, 3, 4] mylist.append(5) print(mylist) # Выводит [1, 2, 3, 4, 5]
А метод extend добавляет в конец списка все элементы другого списка:
mylist = [1, 2, 3, 4] mylist.extend([5, 6]) print(mylist) # Выводит [1, 2, 3, 4, 5, 6]
По сути, это аналог такой записи:
mylist = mylist + [5, 6]
Для удаления элемента из списка используют оператор del:
mylist = [1, 2, 3, 4] del mylist[2] # Удаляет элемент с заданным индексом print(mylist) # Выводит [1, 2, 4]
Стоит упомянуть, что оператор del поддерживает срезы, то есть можно делать так:
mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] del mylist[7:] # Удаляет все элементы от 7-го до конца строки print(mylist) # Выводит [0, 1, 2, 3, 4, 5, 6] del mylist[::2] # Удаляет каждый второй элемент print(mylist) # Выводит [1, 3, 5]
Часто возникает необходимость разбить строку на список подстрок. Например, есть список продуктов, разделенных запятой:
products = "картофель,курица,рис,соль,яйца"
Мы можем разделить эту строку по символу запятой с помощью метода split:
text = products.split(",")
print(text) # Выводит ["картофель", "курица", "рис", "соль", "яйца"]
Если не указать аргумент метода split, строка будет разделена по пробельным символам:
text = "Привет, как дела? У меня все хорошо!" words = text.split() print(words) # Выводит ["Привет,", "как", "дела?", "У", "меня", "все", "хорошо!"]
Обратной операцией является склейка элементов списка в строку. Для этого есть метод join.
words = ["Python", "C#", "JavaScript", "Golang"] text = " ".join(words) # Для склейки используем символ пробела print(text) # Выводит "Python C# JavaScript Golang"
chain = ["Дед", "Бабка", "Внучка", "Жучка", "Кошка", "Мышка", "Репка"] text = " -> ".join(chain) # Для склейки используем строку из нескольких символов print(text) # Выводит "Дед -> Бабка -> Внучка -> Жучка -> Кошка -> Мышка -> Репка"
Методы списков
Как и строки, списки в Python также обладают набором методов. Давайте рассмотрим наиболее полезные из них.
Метод insert позволяет вставить элемент в список. В отличие от append, который добавляет элемент в конец списка, с помощью insert можно указать позицию, в которую нужно добавить элемент.
mylist = [0, 1, 3, 4] mylist.insert(2, 9) print(mylist) # Выводит [0, 1, 9, 3, 4]
Первый аргумент метода – это позиция для вставки элемента. Второй – значение для вставки.
Метод index возвращает индекс элемента в списке, если такой присутствует. Если элемента нет, то будет ошибка ValueError.
mylist = [4, 3, 2, 1, 0] print(mylist.index(3)) # Выводит 1
Метод remove удаляет элемент из списка. Если в списке несколько элементов с указанным значением, то будет удален только первый.
mylist = [0, 1, 3, 4, 3, 2, 1, 0] mylist.remove(3) print(mylist) # Выводит [0, 1, 4, 3, 2, 1, 0]
Метод pop удаляет из списка элемент по указанному индексу и возвращает его.
mylist = [0, 1, 3, 4] print(mylist.pop(2)) # Выводит 3 print(mylist) # Выводит [0, 1, 4]
Метод count возвращает количество элементов, равных указанному.
mylist = [0, 2, 5, 2, 7, 5, 1] print(mylist.count(5)) # Выводит 2
Метод reverse меняет порядок следования элементов в списке на противоположный.
mylist = [0, 1, 3, 4] mylist.reverse() print(mylist) # Выводит [4, 3, 1, 0]
Для удаления всех элементов из списка используют метод clear.
mylist = [0, 1, 3, 4] mylist.clear() print(mylist) # Выводит []
Метод copy создает копию списка.
mylist1 = [0, 1, 3, 4] mylist2 = mylist1.copy() mylist1.clear() print(mylist1) # Выводит [] print(mylist2) # Выводит [0, 1, 3, 4]
Списочные выражения
В Python есть альтернативный способ создания списков. Например, для создания списка из чисел от 0 до 9, можно написать такой код:
numbers = [] for i in range(10): numbers.append(i)
Либо можно воспользоваться списочным выражением:
numbers = [i for i in range(10)]
Вот общий синтаксис списочных выражений:
[выражение for переменная in последовательность]
Еще один пример формирования списка, состоящего из квадратов чисел от 0 до 9:
numbers = [i ** 2 for i in range(10)]
В списочных выражениях можно использовать условный оператор. Например, если требуется создать список чисел от 0 до 100, которые делятся на 2 или 5, то мы можем написать такой код:
numbers = [i for i in range(101) if i % 2 == 0 or i % 5 == 0]
Практика
Теперь давайте закрепим теоретический материал на практике. Для этого предлагаю написать приложение для управления списком задач. Программа должна выполнять следующие действия:
- Вывести список задач
- Добавить задачу в список
- Удалить задачу
- Поиск задач по ключевому слову
Так может быть реализована программа, соответствующая поставленным требованиям:
# Список задач. Изначально он пустой
tasks = []
# Будем бесконечно спрашивать пользователя, что он хочет сделать
# Пока пользователь не укажет, что хочет завершить работу
while True:
print()
print("Выберите действие:")
print("1. Добавить задачу")
print("2. Удалить задачу")
print("3. Вывести задачи")
print("4. Поиск задачи")
print("0. Выход")
# Получаем от пользователя код действия
action = int(input())
print()
# Если пользователь ввел код выхода, то завершаем цикл и всю программу
if action == 0:
break
# Если пользователь ввел код добавления задачи
if action == 1:
# Получаем от пользователя название задачи
task = input("Введите задачу: ")
# Если такой задачи еще нет в списке то добавляем ее
if task in tasks:
print("Такая задача уже есть")
else:
tasks.append(task)
# Если пользователь ввел код удаления задачи
elif action == 2:
# Выводим все элементы списка
# Используем range так как хотим вывести индексы задач
for i in range(len(tasks)):
print(f"{i + 1}. {tasks[i]}")
# Просим пользователя ввести индекс
del_index = int(input("Введите номер задачи для удаления: "))
# И удаляем элемент из списка по индексу
del tasks[del_index - 1]
# Если пользователь ввел код вывода полного списка задач
elif action == 3:
# Выводим количество задач. Получаем его с помощью функции len
print(f"Всего {len(tasks)} задач:")
# Выводим список задач, каждая на отдельной строке
for task in tasks:
print(task)
# Если пользователь ввел код поиска задачи по ключевому слову
elif action == 4:
# Просим пользователя ввести ключевое слово
search = input("Введите строку поиска: ")
# В переменной result сохраняем подходящие задачи
result = [task for task in tasks if search in task]
# Выводим количество найденных задач
print(f"Найдено {len(result)} задач:")
# Выводим список найденных задач
for task in result:
print(task)
Вот пример выполнения программы:



На этом все и спасибо, что дочитали до конца!