Python

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)

Вот пример выполнения программы:

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