Списък с разбивки в Python

List Comprehensions Python



Разбирането на списъци често се използва в Python за писане на изявления с един ред, които създават нов списък или речник чрез циклиране на обект, който може да се повтаря. Тази статия ще обясни как да използвате разбирането на списъци в Python, като започнете с основно обяснение как работят цикли в Python.

За цикъл в Python

Заявление for цикъл в Python последователно повтаря над членовете на всеки обект, списък, низ и т.н. Въпреки че има начини да се направи поведението му същото като другите езици за програмиране (няма да бъде обхванато в тази статия). Можете също така да упражнявате известен контрол върху цикли, като използвате инструкции като continue, break, pass и т.н. По -долу е прост пример за for loop в Python:







захв диапазон(10):
печат(х)

Цикълът for по -горе ще отпечата десет числа, започващи от 0 и завършващи на 9.



Списък Разбирания

Разбирането на списъка не е нищо друго освен стенографски / сбит начин за писане на многоредови за цикли в еднолинейно изявление. Примерът за разбиране на списъка по -долу ще създаде нов списък като [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], като включи всички стойности на x в него.



числа= [хзахв диапазон(10)]
печат (числа)

Имайте предвид, че разбирането на списъка винаги създава нов списък и не променя оригиналните итерации, използвани в израза. Типичният израз за разбиране на списък трябва да има клауза for и може да бъде последван от условни изрази if и else. Без да се използва разбиране на списък, горният пример ще бъде написан по следния начин:





числа= []
захв диапазон(10):
числа.добавям(х)

печат (числа)

Производителност и четливост

Разбирането на списъци е по -бързо, отколкото при цикли. Въпреки това, освен ако не повтаряте стотици хиляди елементи, няма да забележите значителни подобрения в производителността. Докато разбирането на списъка осигурява кратък начин за писане за цикли, сложните изрази могат да доведат до лоша четливост на кода и увеличаване на подробността. Важно е кодът да се чете, освен ако постигането на максимална производителност не е абсолютна необходимост за вашата програма.

Пример: Използване на синтаксиса за разбиране на списъци с речници и набори

Речникът на python е колекция от елементи, дефинирани в двойки ключ-стойност, докато набор е колекция от уникални стойности, където дублиранията не са разрешени. Разбирането на списъци може да се използва и с речници и набори на Python. Синтаксисът се различава леко, вместо да увивате израза в квадратни скоби, сега ще трябва да използвате къдрави скоби. Освен това ще получите нов речник / зададен обект вместо нов списък.



данни= {'град':'Ню Йорк', 'име':'Джон Доу'}

formatted_data= {к: v.заглавие() зада се,vвданни.елементи()}

печат (formatted_data)

Примерът по -горе ще преобразува низните стойности в регистър на заглавието и ще създаде нов речник, наречен formatted_data, чийто изход ще бъде: {‘city’: ‘New York’, ‘name’: ‘John ​​Doe’}. Можете също да промените речника / да го зададете на място, като посочите съществуващата речник на речника отляво.

данни= {'град':'Ню Йорк', 'име':'Джон Доу'}

данни= {к: v.заглавие() зада се,vвданни.елементи()}

печат (данни)

Без използване на речникови разбирания, кодът ще изглежда така:

данни= {'град':'Ню Йорк', 'име':'Джон Доу'}

formatted_data= {}

зада се,vвданни.елементи():
formatted_data[да се] =v.заглавие()

печат (formatted_data)

Тъй като няма двойки ключ-стойност в набори, разбирането на набор може да бъде определено по същия начин като разбирането на списък. Единствената разлика е използването на къдрави скоби.

Пример: Множество за цикли за разбиране на списък

Примерът за разбиране на списъка, споменат по -горе, е основен и използва единично за изявление. По -долу е даден пример, който използва множество за цикли и условен оператор if.

прилагателни= ['Диск', 'Eoan', „Фокално“, „Изкуствено“]

животни= [„Динго“, 'Хермелин', 'Ямата', 'Бобър']

кодови имена= [x +''+ изахвприлагателнизаивживотниакои.започва с(х[0])]

печат (кодови имена)

Кодът ще показва [‘Disco Dingo’, ‘Eoan Ermine’, ‘Focal Fossa’] като изход. Двата цикъла for преминават през списъци с прилагателни и животни и членовете им се обединяват, като използват интервал, само ако първата буква на двете думи е еднаква. Без да се използват списъци, кодът ще изглежда така:

прилагателни= ['Диск', 'Eoan', „Фокално“, „Изкуствено“]
животни= [„Динго“, 'Хермелин', 'Ямата', 'Бобър']

кодови имена= []

захвприлагателни:
заивживотни:
акои.започва с(х[0]):
кодови имена.добавям(x +''+ и)

печат (кодови имена)

Пример: Разбиране на списък с клауза if-else

Примерът по -долу ще покаже използването на if и else изрази в разбирането на списъка.

номер_ списък= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]

резултат= [Вярно ако (x + y)%2 == 0 иначе Фалшиво захвномер_ списъкзаивanother_list]

печат (резултат)

Докато преминава през два списъка, разбирането на списъка по -горе проверява дали сумата от двойката елементи е четна или не. Изпълнението на горния код ще ви покаже [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True] като изход. Без използване на разбиране на списъка, кодът ще изглежда така:

номер_ списък= [1, 2, 3, 4]
another_list= [5, 6, 7, 8]
резултат= []

захвномер_ списък:
заивanother_list:
ако (x + y)%2 == 0:
резултат.добавям(Вярно)
иначе:
резултат.добавям(Фалшиво)

печат (резултат)

Заключение

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