Понимание списков в Python — с примерами
Опубликовано: 2022-02-18В Python генераторы списков помогают создавать новые списки из существующих итерируемых объектов, таких как списки, строки и кортежи.
Их лаконичный синтаксис позволяет создавать новые списки всего одной строкой кода. И этот урок научит вас, как вы можете это сделать.
В течение следующих нескольких минут вы узнаете:
- Как создать новый список, используя цикл
for, - Синтаксис для использования списков в Python и
- Как изменить понимание списка с помощью условного оператора
if.
Кроме того, вы также закодируете несколько примеров, которые помогут вам лучше понять понимание списков.
Давайте погрузимся.
Как создавать списки Python с помощью циклов for
Предположим, у вас есть список чисел nums . И вы хотели бы создать еще один список, содержащий куб всех чисел в nums . Вот как это сделать с помощью цикла for в Python:
nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]В приведенном выше коде у нас есть следующие шаги:
- Инициализировать пустой список
num_cubes. -
numsсписок чисел. - Получите доступ к каждому числу
numи вычислите его куб, используя оператор возведения в степень:num**3. - Наконец, добавьте кубическое значение в список
num_cubes
Примечание. В Python оператор возведения в степень
**используется с синтаксисом:num**pow— числоnumвозводится в степеньpow.
Однако вы можете сделать это проще, используя понимание списков в Python. Приступим к изучению его синтаксиса.
Синтаксис понимания списка Python
Общий синтаксис для понимания списка показан ниже.
<new_list> = [<expression> for <item> in <iterable>]Давайте разберем приведенный выше синтаксис.
- В Python списки разделяются парой квадратных скобок
[]— поэтому вам нужно заключить оператор понимания списка в[]. -
<item>в<iterable>означает, что вы перебираете итерируемый объект. Любой объект Python, который вы можете перебирать и получать доступ к отдельным элементам, таким как списки, кортежи и строки, является итерируемым. -
<expression>— это вывод, который вы хотите вычислить для каждого<item>в<iterable>.
И это звучит просто, да?
По сути, вы хотели бы сделать что-то для всех элементов в списке (или любой итерации), чтобы получить новый список .
Используя это, мы можем упростить синтаксис, как показано на изображении ниже.

Теперь, когда вы изучили синтаксис, пришло время начать кодирование. Вы можете использовать онлайн-среду Python IDE от Geekflare, чтобы следовать этим примерам. Или вы можете запустить их на своей локальной машине.
Примеры понимания списка Python
В предыдущем разделе вы создали новый список num_cubes из nums . Давайте начнем с того, что перепишем это, используя понимание списка.
Использование понимания списка с числами
Теперь давайте воспользуемся упрощенным синтаксисом следующим образом:
-
<do-this>: Здесь вам нужно кубировать каждоеnum. Поэтому замените<do-this>наnum**3. -
<all-items>: переменная цикла —num— отдельные числа в списке. -
<this-list>: существующий список, который у нас есть, этоnums. - И
[num**3 for num in nums]является окончательным выражением.
Собрав все вместе, мы имеем следующий фрагмент кода:
num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]Поздравляем, вы закодировали свое первое понимание списка.
Двигаясь дальше, давайте поработаем со строками Python.
Использование понимания списка со строками
Предположим, у вас есть список authors — вы можете переписать приведенный ниже список с вашими любимыми авторами.
authors = ["jane austen","george orwell","james clear","cal newport"] Обратите внимание, что имена авторов в приведенном выше списке написаны строчными буквами. Теперь мы хотели бы отформатировать их в заголовке и сохранить в новом списке с именем author_list .
Примечание. В Python строковый метод title() принимает строку в качестве аргумента и возвращает копию строки, отформатированную в заголовке. То есть первая буква каждого слова заглавная:
First-name Last-name
Итак, вот все, что вам нужно сделать:
- цикл по списку
authorsи для каждогоauthorв списке, - вызовите
author.title(), чтобы получить копию строки в заголовке.
И код Python для этого показан ниже:
authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']В приведенном выше выводе обратите внимание на то, как имена всех авторов были отформатированы в заголовке — это то, что мы хотели.

Использование понимания списка с несколькими списками
Итак, вы узнали, как использовать генератор списков для создания новых списков из существующего списка. Теперь давайте узнаем, как создать новый список из нескольких списков.
Например, рассмотрим следующую задачу: у вас есть два списка l_arr и b_arr , содержащие значения длины и ширины четырех прямоугольников.
И вам нужно создать новую area списка, которая включает площадь этих 4 прямоугольников. Помните, area = length * breadth .
l_arr = [4,5,1,3] b_arr = [2,1,7,9] Вам понадобятся элементы из обоих списков ( l_arr и b_arr ), чтобы вычислить площадь. И вы можете сделать это, используя функцию Python zip() .
Примечание. В Python функция
zip()принимает один или несколько итерируемых объектов в качестве аргументов с синтаксисомzip(*iterables). Затем он возвращает итератор кортежей, где кортежiсодержит элементiиз каждой итерации.
На следующем изображении это подробно описано. У вас есть 4 значения в l_arr и b_arr , поэтому диапазон индексов от 0 до 3. Как вы можете видеть, кортеж 0 содержит l_arr[0] и b_arr[0] , кортеж 1 содержит l_arr[1] и b_arr[1] ]. b_arr[1] и так далее.

Таким образом, вы можете выполнить цикл zip(l_arr,b_arr) как показано ниже:
area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]В следующем разделе вы узнаете, как использовать условные операторы внутри понимания списка.
Понимание списка Python с синтаксисом условия
Давайте начнем с использования предыдущего синтаксиса для понимания списка.
Вот синтаксис:
<new_list> = [<expression> for <item> in <iterable> if <condition>] Вместо того, чтобы вычислять <expression> для всех элементов, вы хотели бы сделать это только для тех элементов, которые удовлетворяют определенному <condition> — где, condition := True . И это приводит к упрощенному синтаксису, как показано:

На этом давайте перейдем к примерам кода.
Понимание списка Python с примерами условий
№1. Вам дана строка «Я изучаю Python в 2022 году» . Вы хотите получить список всех цифр в этой строке. Так как ты это делаешь?
В Python
<char>.isdigit()действует на символ<char>и возвращаетTrue, если это цифра (0-9); иначе он возвращаетFalse.
Фрагмент кода ниже показывает, как вы можете собрать список всех цифр в строке str1 .
str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']В приведенном выше коде:
- вы перебираете строку
str1, - получить доступ к каждому
char, чтобы проверить, является ли он цифрой, используя методisdigit(), и - добавить
charв новый списокdigits, только если это цифра.
Возьмем другой пример.
№ 2. У вас есть список фруктов. И вы хотите создать список starts_with_b , содержащий все фрукты из списка fruits , которые начинаются с b . Вы можете использовать метод startswith() для записи условия.
<str>.startswith('char')возвращаетTrue, если <str> начинается с 'char'; иначе он возвращаетFalse.
fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana'] В приведенном выше выводе мы получаем 'blueberry' и 'banana' которые являются двумя фруктами, начинающимися с 'b' в списке fruits , как мы и ожидали.
На этом мы завершаем обсуждение понимания списков.
Вывод
Я надеюсь, что это руководство помогло вам понять понимание списков в Python.
Подведем итог:
- Вы можете использовать [<do this> для <all-items> в <this-list>] , чтобы создать новый список, используя понимание списка.
- Кроме того, вы можете использовать синтаксис [<do this> для <all-items> в <this-list> if <condition-is-True>] с условным оператором
if.
Кроме того, вы также закодировали несколько примеров. В качестве следующего шага вы можете попробовать переписать некоторые из ваших существующих циклов Python для создания списка с использованием понимания списка. Удачного кодирования! До следующего урока.
Теперь вы можете посмотреть, как преобразовать список в словарь, или научиться работать с файлами в Python.
