# Списковые включения в Python (Полное руководство с примерами)

## Списковые включения (List Comprehensions) в Python: Полное руководство

#### Оглавление

1. [Введение](#vvedenie)
2. [Основы списковых включений](#osnovy-spiskovykh-vklyuchenii)
3. [Преимущества](#preimushestva)
4. [Синтаксис и примеры](#sintaksis-i-primery)
   * [Базовое использование](#bazovoe-ispolzovanie)
   * [Сравнение с циклами for](#sravnenie-s-ciklami-for)
   * [Условные операторы](#uslovnye-operatory)
   * [Вложенные списковые включения](#vlozhennye-spiskovye-vklyucheniya)
5. [Когда не стоит использовать](#kogda-ne-stoit-ispolzovat)
6. [Заключение](#zaklyuchenie)

### Введение

Списковые включения (List Comprehensions) — мощный и элегантный способ создания, модификации и фильтрации списков в Python. Они позволяют писать более компактный и читаемый код.

### Основы списковых включений

#### Что такое список в Python?

**Характеристики списков**:

* Встроенная составная структура данных
* Может содержать элементы разных типов
* Упорядоченная коллекция
* Изменяемая структура

#### Определение списковых включений

<mark style="color:green;">**Списковое включение**</mark> — это краткий способ создания списка с помощью единой строки кода. Базовый синтаксис:

```python
[выражение for элемент in итерируемый_объект]
```

### Преимущества

1. **Краткость**: Меньше кода по сравнению с традиционными циклами
2. **Читаемость**: Более понятная структура
3. **Производительность**: Оптимизированы интерпретатором Python

### Синтаксис и примеры

#### Базовое использование

**Создание списка квадратов**:

```python
# Традиционный подход
squares = []
for x in [1, 2, 3, 4, 5]:
    squares.append(x ** 2)

# Списковое включение
squares = [x ** 2 for x in [1, 2, 3, 4, 5]]
print(squares)  # [1, 4, 9, 16, 25]
```

#### Сравнение с циклами for

**Создание списка чисел**:

```python
# Цикл for
numbers = []
for i in range(10):
    numbers.append(i)

# Списковое включение
numbers = [i for i in range(10)]
print(numbers)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```

#### Условные операторы

**Модификация элементов**

```python
# Определение четных и нечетных чисел
old_list = [1, 2, 3, 4, 5]
new_list = ['even' if x % 2 == 0 else 'odd' for x in old_list]
print(new_list)  # ['odd', 'even', 'odd', 'even', 'odd']
```

**Фильтрация**

```python
# Выбор нечетных чисел
old_list = [1, 2, 3, 4, 5]
new_list = [x for x in old_list if x % 2 == 1]
print(new_list)  # [1, 3, 5]
```

**Множественные условия**

```python
# Числа, делящиеся на 2 и 5
new_list = [i for i in range(1, 101) if i % 2 == 0 if i % 5 == 0]
print(new_list)  # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
```

#### Вложенные списковые включения

**Преобразование вложенного списка**:

```python
# Преобразование списка списков в плоский список
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [i for j in nested_list for i in j]
print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
```

**Поиск общих элементов**:

```python
list1 = ['apple', 'orange', 'banana', 'grape']
list2 = ['grapefruit', 'apple', 'grape', 'pear']

common_items = [i for i in list1 if i in list2]
print(common_items)  # ['apple', 'grape']
```

### Когда не стоит использовать

**Ограничения**:

* Избегайте слишком сложных включений
* Приоритет читаемости кода
* Не заменяйте простые циклы громоздкими включениями

**Правило**: Если включение становится сложным для понимания, используйте традиционный цикл.

### Заключение

Списковые включения — мощный инструмент Python для:

* Создания списков
* Трансформации данных
* Фильтрации элементов

**Ключевые takeaways**:

* Используйте, когда код становится более читаемым
* Помните о балансе между краткостью и понятностью
* Практикуйтесь и экспериментируйте!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/python/python-lists/spiskovye-vklyucheniya-v-python-polnoe-rukovodstvo-s-primerami-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
