Понимание списков в 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.