Рубрики
Без рубрики

Список постижений в Python

Понимание списка-это процесс создания нового списка из существующего. Они предлагают много преимуществ традиционным спискам. В этой статье мы погрузимся в теорию и практику использования списков.

Автор оригинала: Guest Contributor.

Список постижений в Python

Список-это один из основных типов данных в Python. Каждый раз , когда вы сталкиваетесь с именем переменной, за которым следует квадратная скобка [] или конструктор list , это список, способный содержать несколько элементов, что делает его составным типом данных. Точно так же легко объявить новый список и впоследствии добавить в него один или несколько элементов.

Давайте создадим новый заполненный список, например:

>>> new_list = [1, 2, 3, 4, 5]
>>> new_list
[1, 2, 3, 4, 5]

Или мы можем просто использовать метод append () , чтобы добавить в список все, что вы хотите:

>>> new_list.append(6)
>>> new_list
[1, 2, 3, 4, 5, 6]

Если вам нужно добавить несколько элементов в один и тот же список, вам пригодится метод extend () . Вам просто нужно передать список элементов для добавления в метод extend , как показано ниже:

>>> new_list.extend([7, 8, 9])
>>> new_list
[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

Аналогично, вы можете использовать цикл for для добавления нескольких элементов в список. Например, нам придется написать следующий фрагмент кода для создания списка квадратов для целых чисел 1-20.

list_a = []
for i in range(1, 20):
    list_a.append(i**2)

Что такое Понимание списков в Python?

Проще говоря, понимание списка-это процесс создания нового списка из существующего. Или вы можете сказать, что это уникальный способ Python добавлять цикл for в список. Но уже довольно просто объявить список и добавить к нему все, что вам нравится. Не так ли? Так зачем же утруждать себя осмыслением наших списков?

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

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

list_b = [i**2 for i in range(1, 20)]

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

Синтаксис для понимания списка

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

[expression for item in list if conditional]

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

Как вы, возможно, уже догадались, “выражение” на самом деле является результатом, который мы получаем, когда выполняем остальную часть кода в понимании списка. Сам код-это просто цикл for, повторяющий набор данных. В нашем примере мы используем выражение или выходные данные для создания списка квадратов.

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

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

Мы также рассмотрим другой, более сложный пример, чтобы лучше понять концепцию, лежащую в основе понимания списка.

list_a = [1, 3, 6, 9, 12, 15]
list_b = []
for number in list_a:
    if number % 4 == 0:
        list_b.append(number)

print(list_b)

На самом деле мы зацикливаемся на list_a в приведенном выше примере. Впоследствии мы добавим элемент в list_b , если его значение делится на 4, что проверяется с помощью оператора модуля ( % ). В этом примере мы увидим следующее напечатанное на консоли:

[12]

Это потому, что 12 – единственное число в этом массиве, которое делится на 4.

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

Как уже упоминалось выше, цикл for в приведенном выше операторе повторяет список, называемый list_a . Затем он выполняет условный оператор, который проверяет, делится ли текущее значение на 4. Наконец, он выполняет метод .append () , когда выясняет, что значение действительно делится на 4.

Теперь, если вы хотите написать вышеприведенный фрагмент кода с пониманием списка, он будет выглядеть примерно так:

list_a = [1, 3, 6, 9, 12, 15]
list_b = [number for number in list_a if number % 4 == 0]

print(list_b)

Как вы можете видеть, мы сократили цикл for , который охватывал три строки, до одной строки. В этом и заключается настоящая красота понимания списка.

Когда использовать Понимание списка

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

Предположим, у вас есть список тысяч нынешних и предыдущих студентов с их именами, фамилией их отца и адресами. Данные каждого из студентов далее хранятся в соответствующем словаре. Но что, если вы хотите только напечатать их имена?

students = [
    {
        "name" : "Jacob Martin",
        "father name" : "Ros Martin",
        "Address" : "123 Hill Street",
    }, {
        "name" : "Angela Stevens",
        "father name" : "Robert Stevens",
        "Address" : "3 Upper Street London",
    }, {
        "name" : "Ricky Smart",
        "father name" : "William Smart",
        "Address" : "Unknown",
    }
]

У нас есть возможность перебирать список с помощью традиционного цикла for :

names_list = []

for student in students:
    names_list.append(student['name'])

print(names_list)

Хотя в этом примере это всего лишь две строки кода для цикла for , нам даже не нужно писать так много строк. Мы можем выполнить ту же задачу, написав только одну строку кода с помощью метода понимания списка:

names_list = [student['name'] for student in students]

print(names_list)
['Jacob Martin', 'Angela Stevens', 'Ricky Smart']

Вывод

Это действительно удивительно, как понимание списка на самом деле уменьшает вашу рабочую нагрузку. Однако вначале это может показаться запутанным. Это особенно сбивает с толку новичков, которые никогда раньше не рисковали заходить на эту территорию, в основном из-за синтаксиса. Вам также может быть трудно понять эту концепцию, если вы программировали на других языках, потому что понимание списка не существует ни на одном из них. Единственный способ разобраться в понимании списка-это усердно практиковаться.