Баннер мобильный (3) Пройти тест

Что такое списки в Python и как с ними работать

Разбираемся в основах Python

Разбор

4 октября 2024

Поделиться

Скопировано
Что такое списки в Python и как с ними работать

Содержание

    Научимся создавать списки. Освоим различные способы преобразования списков и разберемся, для каких задач они нужны.

    Что такое список и как его создать

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

    Приведем пример создания списка, содержащего названия планет земной группы:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]

    Чтобы вывести элементы списка в консоль, можно добавить такую строку:

    print(planets)

    В результате выполнения последней команды в консоли будет выведено следующее:

    ['Меркурий', 'Венера', 'Земля', 'Марс']

    Также список можно создать при помощи конструктора list. Так создается пустой список: 

    empty_list = list()

    А вот так можно создать копию уже существующего списка:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    terrestrial_planets = list(planets)
    
    print(terrestrial_planets)

    Еще с помощью list можно создать список из строки:

    hello_letters = list("Привет")
    
    print(hello_letters)

    Вывод в консоли будет таким:

    ['П', 'р', 'и', 'в', 'е', 'т']

    Как видим, в создании списков нет ничего сложного. Далее рассмотрим, как можно работать со списками и проводить над ними различные преобразования.

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

    Для примера возьмем тот же самый список с планетами земной группы. Попробуем вывести в консоль первый элемент списка. Для этого нам необходимо знать индекс элемента. Отсчет (индексация) элементов в списке начинается с нуля, поэтому индекс у первого элемента будет равен нулю, у второго — единице и так далее. Чтобы вывести первый элемент, нужно написать:

    print(planets[0])

    В консоли должно появиться название первой планеты — Меркурий. Выведем поочередно названия всех планет из списка:

    print(planets[0])
    print(planets[1])
    print(planets[2])
    print(planets[3])

    В консоли будет выведено:

    Меркурий
    
    Венера
    
    Земля
    
    Марс

    Получили все элементы списка.

    Присвоение нового значения

    Иногда бывает нужно изменить один из элементов в списке. Для этого достаточно обратиться к элементу через индекс и присвоить ему новое значение. Присвоим новое значение элементу Марс:

    planets[3] = "Красная планета"

    Теперь, если мы выведем все элементы нашего списка в консоль, то увидим следующее:

    Меркурий
    
    Венера
    
    Земля
    
    Красная планета

    Новое значение успешно присвоено.

    Разложение списка на переменные

    В этом случае происходит создание отдельных переменных для каждого элемента списка. Сделаем это для нашего набора планет:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    mercury, venus, earth, mars = planets

    Следует учитывать, что количество переменных должно быть равно количеству элементов списка. Теперь в консоль все это можно вывести так:

    print(mercury)
    print(venus)
    print(earth)
    print(mars)

    Понятно, что разложение таким способом имеет смысл только для небольших списков. В случае больших списков лучше всего применять обращение к элементам по индексу.

    Перебор элементов с помощью циклов

    Перебрать все элементы списка можно с помощью цикла for или while. Сначала сделаем это при помощи цикла for:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    for planet in planets:
        print(planet)

    В цикле создается переменная planet, в которую записывается элемент списка. То есть при каждой новой итерации (прохождении цикла) переменная перезаписывается и ее значение выводится в консоль. Теперь сделаем перебор при помощи цикла while:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    i = 0
    while i < len(planets):
        print(planets[i])
        i += 1

    Здесь создается переменная i, выполняющая роль счетчика итераций. В условии цикла ее значение сравнивается с длиной списка, которая получается при помощи функции len. В теле цикла при каждой итерации значение переменной i увеличивается на единицу, и, как только это значение станет равным длине списка, цикл прекратит выполняться. Значение переменной i — это индекс элемента в списке. В итоге мы получим все тот же список планет, выведенный в консоли.

    Получение части списка

    При желании можно получить часть списка. Для этого опять же понадобятся индексы элементов. Например, чтобы получить названия только первых трех планет из нашего списка, напишем:

    slice_planets = planets[:3]

    Мы получили новый список slice_planets. Выведем его в консоль командой print(slice_planets). Получим:

    ['Меркурий', 'Венера', 'Земля']

    Чтобы вывести названия только второй и третьей планеты, напишем так:

    slice_planets = planets[1:3]
    print(slice_planets)

    Вывод будет таким:

    ['Венера', 'Земля']

    В квадратных скобках на первом месте указываем индекс элемента, начиная с которого создается новый список (ноль можно не писать), а на втором месте — индекс элемента, до которого создается новый список.

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

    Если нам даны два списка, содержащие один и тот же набор элементов, то эти списки считаются равными. Сравним вот эти списки:

    planets1 = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets2 = ["Меркурий", "Венера", "Земля", "Марс"]

    Сравним их при помощи конструкции if — else:

    if planets1 == planets2:
        print("Списки равны")
    else:
        print("Списки не равны")

    Понятно, что в этом случае мы получим сообщение о равенстве списков. А теперь поменяем местами Меркурий с Венерой:

    planets1 = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets2 = ["Венера", "Меркурий", "Земля", "Марс"]

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

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

    Для добавления нового элемента в список можно использовать метод append. Этот метод добавляет элемент в конец списка. Возьмем наш список планет земной группы и добавим в него планету Юпитер:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.append("Юпитер")
    
    print(planets)

    В консоль будет выведено следующее:

    ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер']

    Еще есть метод insert, при помощи которого можно вставить элемент на выбранную позицию. Допустим, нам дан список планет без Венеры:

    planets = ["Меркурий", "Земля", "Марс"]

    Вставим Венеру на вторую позицию. Для этого в качестве параметров в методе insert укажем индекс позиции и название планеты:

    planets.insert(1, "Венера")
    
    print(planets)

    Вывод будет таким:

    ['Меркурий', 'Венера', 'Земля', 'Марс']

    Также имеется метод extend. С его помощью можно добавлять в список целые наборы элементов. Добавим к планетам земной группы планеты-гиганты:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.extend(["Юпитер", "Сатурн", "Уран", "Нептун"])
    
    print(planets)

    В консоли будет выведен весь набор планет Солнечной системы:

    ['Меркурий', 'Венера', 'Земля', 'Марс', 'Юпитер', 'Сатурн', 'Уран', 'Нептун']

    Теперь поговорим об удалении элементов.

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

    Для удаления элемента из списка отлично подходит метод remove. Удалим, например, Марс из нашего списка планет земной группы:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.remove("Марс")
    
    print(planets)

    Вывод в консоли будет такой:

    ['Меркурий', 'Венера', 'Земля']

    Также для удаления элементов можно использовать метод pop. Если этот метод использовать без параметров, то будет удален последний элемент списка:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.pop()
    
    print(planets)

    В данном примере результат будет такой же, как и в предыдущем: удалится Марс из списка. Если же передать методу pop индекс элемента в качестве параметра, то элемент с этим индексом и будет удален. Удалим, например Землю из списка:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.pop(2)
    
    print(planets)

    Результат:

    ['Меркурий', 'Венера', 'Марс']

    С помощью метода clear можно удалить вообще все элементы:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets.clear()
    
    print(planets)

    В результате получим это:

    []

    Получили пустой список, так как все элементы были удалены.

    Проверка наличия элемента и подсчет вхождений

    Иногда бывает полезно проверить, существует ли элемент в списке. Например, такую проверку полезно делать перед удалением элемента. Возьмем код с удалением Марса из прошлого раздела и добавим в него проверку наличия Марса в списке:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    if "Марс" in planets:
        planets.remove("Марс")
    
    print(planets)

    Все дело в том, что метод remove генерирует исключение в случае, если удаляемый элемент не будет найден. Чтобы этого не произошло, нужно сначала проверить наличие элемента в списке. 

    Чтобы подсчитать количество того или иного элемента в списке, можно применить метод count:

    planets = ["Меркурий", "Венера", "Земля", "Марс"]
    
    planets_count = planets.count("Земля")
    
    print(planets_count)

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

    Сортировка

    Для сортировки элементов по возрастанию применяется метод sort. Возьмем последовательность чисел от 0 до 9, расставленных в случайном порядке:

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

    Отсортируем ее и выведем в консоль:

    numbers.sort()
    
    print(numbers)

    В консоли получим:

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

    Чтобы получить последовательность чисел в порядке убывания, нужно сразу после сортировки применить метод reverse:

    numbers.sort()
    numbers.reverse()
    
    print(numbers)

    Результат:

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

    Если применить сортировку к списку планет, то после сортировки планеты будут расставлены в алфавитном порядке. Возьмем полный список планет:

    planets = ["Меркурий", "Венера", "Земля", "Марс", "Юпитер", "Сатурн", "Уран", "Нептун"]
    
    planets.sort()
    
    print(planets)

    В итоге получим такой вывод:

    ['Венера', 'Земля', 'Марс', 'Меркурий', 'Нептун', 'Сатурн', 'Уран', 'Юпитер']

    А дальше мы предлагаем решить небольшую задачку.

    Задание для самостоятельного выполнения

    Имеется следующий список:

    numbers = [5, 5, 2, 1, 1, 1, 7, 7]

    Требуется удалить дубликаты при помощи методов count и remove. 

    Решение

    Для решения этой задачи можно воспользоваться циклом for, который будет последовательно перебирать элементы в списке. В тело цикла помещаем условный оператор if. Он сравнивает результат подсчета одинаковых элементов, и если результат окажется больше единицы, то происходит удаление элемента. Код будет примерно таким:

    numbers = [5, 5, 2, 1, 1, 1, 7, 7]
    
    for i in numbers:
        if numbers.count(i) > 1:
          numbers.remove(i)
    
    print(numbers)

    Результат:

    [5, 2, 1, 7]

    Казалось бы, все прекрасно и решение найдено. Но попробуйте добавить в конец списка еще одну семерку:

    numbers = [5, 5, 2, 1, 1, 1, 7, 7, 7]

    В результате получим:

    [5, 2, 1, 7, 7]

    Не все дубликаты были удалены. Это можно исправить, если заставить цикл работать не с исходным списком, а с его копией. В этом случае преобразования будут вестись в исходном списке, а перебор элементов — в его копии. Тогда код получается такой:

    numbers = [5, 5, 2, 1, 1, 1, 7, 7, 7]
    
    for i in list(numbers):
        if numbers.count(i) > 1:
          numbers.remove(i)
    
    print(numbers)

    Результат:

    [5, 2, 1, 7]

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии