List comprehension в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

В каждом языке программирования есть свои плюсы и особенности, и Python не исключение. В нем есть такая замечательная вещь, как list comprehension. В этом руководстве мы покажем примеры использования данного подхода. 

List comprehension — это упрощенный подход к созданию списка, который использует цикл for, а также операторы if-else для определения того, что окажется в конечном списке.

Преимущества list comprehension

  • Простота. List comprehension позволяет избавиться от циклов for и сделать код более понятным. Например, в JavaScript есть что-то похожее в виде map() и filter(), но они сложнее для понимания новичками.
  • Скорость. List comprehension происходит быстрее, чем циклы for, которые он заменяет. Это один из первых шагов рефакторинга кода Python.
  • Принципы функционального программирования. Для новичков это не так важно, но функциональное программирование — это подход, при котором изменяемые данные не меняются. Поскольку list comprehensions создают новый список без изменения существующего, их можно классифицировать как функциональное программирование.

Создание list comprehension

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

Создадим простой пример списка из числе от 1 до 5 с помощью функции range()

numbers = [num for num in range(1, 6)]
print(numbers, type(numbers))

Посмотрим результат:

[1, 2, 3, 4, 5] <class 'list'>

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

Итерируемый объект не обязательно должен быть функцией range(). Это может быть любое итерируемое значение.

List comprehension с if

Создадим пример используя if без List comprehension:

nums = [num for num in range(1, 11)]

even_numbers = []

for num in nums:
    if num % 2 == 0:
        even_numbers.append(num)

print(even_numbers)

Результат:

[2, 4, 6, 8, 10]

А теперь попробуем сократить конструкцию с помощью list comprehension:

nums = [num for num in range(1, 11)]

even_numbers = [num for num in nums if num % 2 == 0]

print(even_numbers)

Результат:

[2, 4, 6, 8, 10]

List comprehension позволяет заменять длинные конструкции с помощью лаконичной и простой конструкции. 

List comprehension с вложенным циклом for

Вот пример List comprehension с вложенным for. Читается нетрудно.

matrix = [
    [x for x in range(1, 9)]
    for y in range(1, 4)
]
print(matrix)

Результат:

[[1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8]]

Пример со словарем:

Без list comprehension:

people = [{
    'first_name': 'Владислав',
    'last_name': 'Александрович',
    'birthday': '23.12.1998'
}, {
    'first_name': 'Екатерина',
    'last_name': 'Андреевна',
    'birthday': '01.12.1997'
}]

birthdays = []

for person in people:
    for term in person:
        if term == 'birthday':
            birthdays.append(person[term])

print(birthdays)

С list comprehension

people = [{
    'first_name': 'Владислав',
    'last_name': 'Александрович',
    'birthday': '23.12.1998'
}, {
    'first_name': 'Екатерина',
    'last_name': 'Андреевна',
    'birthday': '01.12.1997'
}]

birthdays = [person[term] for person in people for term in person if term == 'birthday']

print(birthdays)

Результат:

['23.12.1998', '01.12.1997']
Теги записи: Python, Основы Python,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)