Понимание списков в 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 (изображение автора)

Теперь, когда вы изучили синтаксис, пришло время начать кодирование. Вы можете использовать онлайн-среду 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] и так далее.

python-zip-функция
Функция Python zip() (изображение автора)

Таким образом, вы можете выполнить цикл 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 с синтаксисом условия (изображение автора)

На этом давайте перейдем к примерам кода.

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