Към основното съдържание
Основи на Python2026-07-29 · 8 мин четене

Обяснение на разбирането на списъци на Python: Кога да ги използвате и кога не (2026)

Разбирането на списъци е една от най-неразбраните функции на Python. Начинаещите ги избягват, защото "изглеждат сложни". Междинните продукти ги използват прекалено много, докато всеки трети ред е вложен един ред, който никой не може да прочете. Този урок поправя и двете грешки.

Ще разгледаме: точната форма от три части, която следва всяко разбиране на списъка, показатели срещу за / карта / филтър, четирите модела, които трябва да разпознавате веднага, и строго правило за това кога да спрете използването на разбирания и вместо това да посегнете към обикновен цикъл.

Формата: [ какво | източник | филтър ]

Всяко разбиране на списък се състои от три части в този ред:

▶ PYTHONeditable · runs in your browser

Четейки го на глас: "дайте ми `израз` за всеки `елемент` в `iterable`, но само когато `условието` е вярно."

Започнете с еквивалентния цикъл for, след което го свийте:

▶ PYTHONeditable · runs in your browser

Същият резултат — „[0, 4, 16, 36, 64]“. Разбирането е един ред, разпределя списъка отпред (без извиквания на append), а компилаторът на байткод на Python излъчва LIST_APPEND — бърз път, който пропуска търсенето на атрибут в .append.

Бенчмарк: разбиране срещу for-цикъл срещу карта+филтър

Изграждане на списък от четни числа на квадрат от 0 до 100 000:

| Метод | Време (µs) | Относително |

|---|---|---|

| за + .прибавяне | 4800 | 1,9× базова линия |

| списък(карта(..., филтър(...))) | 3200 | 1,3× базова линия |

| Списък разбиране | 2500 | 1.0× (най-бързо) |

Измерено на Python 3.13, еднократно изпълнение от 1000 итерации. Разбиранията печелят, защото няма извикване на функция за всеки елемент — изразът е вграден.

Това каза: не микро-оптимизиране. За списък от 100 елемента и трите завършват за под 100µs. Първо изберете четливост.

Четирите модела, които трябва да разпознаете

1. Трансформирайте всеки елемент

▶ PYTHONeditable · runs in your browser

Вмъкваща се замяна за map(str.title, names), но не се нуждае от обвиване на list(...).

2. Филтриране без трансформиране

▶ PYTHONeditable · runs in your browser

По-чист от „списък(филтър(ламбда n: n > 0, числа))“. Няма нужда от „ламбда“.

3. Филтрирайте И трансформирайте

▶ PYTHONeditable · runs in your browser

Това е мястото, където разбиранията очевидно надминават алтернативите - опитайте да го напишете с map + filter и пребройте скобите.

4. Изравняване на вложен списък

▶ PYTHONeditable · runs in your browser

Редът има значение: „за ред в матрицата“ се чете отляво надясно като еквивалентните вложени цикли „за“. Това е единственият модел, при който вложените разбирания остават четими - всичко по-дълбоко се нуждае от цикъл.

Кога да СПРЕТЕ използването на разбирания

Три твърди правила, подредени по важност:

1. Три или повече клаузи „за“ → използвайте цикъл. Тройно вложеното разбиране е нечетливо дори за човека, който го е написал преди 20 минути.

▶ PYTHONeditable · runs in your browser

2. Странични ефекти → използвайте цикъл. Разбиранията са за изграждане на списък. Ако извиквате функция за нейните странични ефекти (писане във файл, изпращане на заявка), използвайте цикъл. „[print(x) for x in items]“ е миризма на код — вие създавате списък за изхвърляне на „Няма“.

3. Изразът е по-дълъг от 60 знака → разбийте го. Ако трябва да мислите повече от 3 секунди, за да го анализирате, разделете на именувана функция или цикъл.

Разбиране на Dict и набор — същата форма

Същият синтаксис, различни скоби:

▶ PYTHONeditable · runs in your browser

Разбиранията на Dict са особено полезни за обръщане на съпоставяне ({v: k за k, v в d.items()}) или изграждане на справочна таблица от списък.

Генераторни изрази — удобният за памет братовчед

Пуснете скобите, запазете скобите:

▶ PYTHONeditable · runs in your browser

За sum, min, max, any, all, ", ".join(...) и други функции, които итерират веднъж, предпочитайте генераторния израз — той запазва разпределението на междинния списък. За всичко, което трябва да индексирате или итерирате два пъти, използвайте разбиране.

Практика: три упражнения

Пренапишете всеки, като използвате списък за разбиране. Решенията са накрая.

1. Дадени са words = ["котка", "слон", "куче", "хипопотам"], вземете списък с думи, по-дълги от 4 знака, всички с главни букви.

2. Като се има предвид data = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}], извлечете списък само с имената.

3. При дадени двойки = [(1, 2), (3, 4), (5, 6)], вземете списък със сумите на всяка двойка.

Решения:

▶ PYTHONeditable · runs in your browser

Разбирането на списъци е отличителна черта на Python - знанието кога да посегнете към един (и кога да го оставите като цикъл „for“) е надежден маркер за средно ниво на владеене. Практикувайте, като пренаписвате съществуващите цикли for + .append, които намирате във вашия собствен код; не всеки трябва да стане разбиране, но тези, които трябва, ще се почувстват очевидни след седмица.

Следваща стъпка: опитайте 5 интерактивни урока за разбиране на списъци с истински Python, работещ във вашия браузър, и AI ментор на всяка стъпка.

Готови ли сте да опитате?

15 безплатни уроци след безплатна регистрация — без карта. Изпробвайте платформата и след това решете.

Започнете безплатно →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.