Список - один из основных типов данных в 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, повторяющий набор данных. В нашем примере мы используем выражение или результат для создания списка квадратов.
Обратите внимание, что условное выражение является необязательным, поэтому, как и в нашем примере выше, нам не нужно его включать.
Также стоит упомянуть, что у нас есть список, который нужно перебрать, элемент или элементы, которые нужно повторить, и, конечно же, условный оператор как в понимании списка, так и в традиционных циклах 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']
Заключение
Удивительно, как составление списков также снижает вашу рабочую нагрузку. Однако вначале это может показаться запутанным. Это особенно сбивает с толку новичков, которые никогда раньше не осваивались на этой территории, в основном из-за синтаксиса. Вам также может быть трудно понять эту концепцию, если вы программировали на других языках, потому что понимание списков не существует ни на одном из них. Единственный способ разобраться в понимании списка - это усердно практиковаться.