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

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

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

Пример:

( x: x is a natural number greater than 15 )
( x: x is a vowel in word 'Data Science', x is a vowel )

Нека създадем разбиране на списъка за горните две твърдения.

(x for x in range(0, 20) if x>15) (x for x in 'Data Science' if x in ('a', 'e', 'i', 'o', 'u'))

изход:

(16, 17, 18, 19) („a“, „a“, „i“, „e“, „e“)

Разбиранията на списъка са лесни за разбиране и изпълнение. По принцип те са създадени на маси. Има три неща, които трябва да се имат предвид при писането на синтаксиса за разбиране на списъци.

  1. Параметър за изход
  2. Итерабелен
  3. условия

Синтаксисът може да има две от горните или 3 от горните като синтаксис за разбиране на списъка.

Синтаксис:

(output parameter | The Iterable)
(output Parameter | The Iterable | Condition )

Примери за разбиране на списъка на Python

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

Пример №1: Намиране на перфектните квадрати

Ето примери за перфектни квадрати с различни условия, дадени по-долу:

1. С за Loop

for i in range(1, 30):
if int(i**0.5)==i**0.5:
print(i)

2. Използване на списъчни разбирания

(x for x in range(1, 30) if int(x**0.5)==x**0.5)

изход:

Пример №2: Вземете само съгласни от изречение

Тук ще вземем едно произволно изречение и ще се опитаме да получим съгласни в изречението като наш изход.

1. Използване за Loop

def consonants_for(sentence):
vowels = 'aeiou'
consonants = () for x in sentence:
if x not in vowels:
consonants.append(x)
return ''.join(consonants)
sentence = 'we are studying list comprehensions'
print("With For Loop : " + consonants_for(sentence))

изход:

With For Loop: wr stdyng lst cmprhnsns

2. Използване на разбирането на списъка

def consonants_lc(sentence):
vowels = 'aeiou'
return ''.join(( x for x in sentence if x not in vowels))
sentence = 'we are studying list comprehensions'
print("Using List Compr: " + consonants_lc(sentence))

изход:

Използване на List Compr: wr stdyng lst cmprhnsns

Пример №3: Създаване на речник от две, за разлика от списъците

Ето примери за речник с различни условия, дадени по-долу:

1. Използване за Loop

def dict_for(keys, values):
dictionary = ()
for i in range(len(keys)):
dictionary(keys(i)) = values(i) return dictionary
Movie = ('RDB', 'Wanted', 'DDLG', 'Sholay', 'War', ) Actor = ('Aamire', 'Salman', 'SRK', 'Amitabh', 'Hritik') print("FOR-loop result: " + str(dict_for(Movie, Actor)))

изход:

Резултат за FOR-цикъл: ('RDB': 'Aamire', 'Wanted': 'Salman', 'DDLG': 'SRK', 'Sholay': 'Amitabh', 'War': 'Hritik')

2. Използване на разбирането на списъка

def dict_lc(keys, values):
return ( keys(i) : values(i) for i in range(len(keys)) )
Movie = ('RDB', 'Wanted', 'DDLG', 'Sholay', 'War', ) Actor = ('Aamire', 'Salman', 'SRK', 'Amitabh', 'Hritik') print("LC result : " + str(dict_lc(Movie, Actor)))

изход:

Резултат от LC: ('RDB': 'Aamire', 'Wanted': 'Salman', 'DDLG': 'SRK', 'Sholay': 'Amitabh', 'War': 'Hritik')

Предимства на разбирането на списъка на Python

Разбиранията в списъка изпълняват същата задача, но по различен начин!

Разбирането на списъка има много предимства пред цикъла и други методи. Някои от предимствата са следните:

  1. Разбиранията на списъка са лесни за разбиране и правят код елегантен. Можем да напишем програмата с прости изрази.
  2. Разбиранията на списъка са много по-бързи, отколкото при цикъла и други методи като карта. (Същото е обяснено в по-долу пример:

Ще вземем пример 1 за справка и ще изчислим времето, необходимо за различните методи за изпълнение на една и съща функция. Първо, ще видим времето, отведено от „for loop“, а след това времето се отнема по метода map () и най-накрая ще видим времето, отведено от разбирането на списъка.

Таблица показва времето, отделено от различните техники.

1. За контур

Пример за използване на цикъл, даден по-долу:

Код:

def perf_square(x):
output = () for i in x:
if int(i**0.5)==i**0.5:
output.append(i)
return output
%timeit perf_square(range(1, 30))

2. Метод на карта

Пример чрез метода на картата, даден по-долу:

Код:

def perf_square_map(x):
return map(lambda i: i**0.5==i**0.5, x)
%timeit perf_square_map(range(1, 30))

3. Списък на разбиранията

Пример с помощта на разбирането на списъка, дадено по-долу:

Код:

def perf_square_lc(x):
return (i**0.5 == i**0.5 for i in x) %timeit perf_square_lc(range(1, 30))

изход:

методпът
За контур787 ns
Метод Map ()518 ns
Списък на разбирането276 ns

Ясно, че времето за изпълнение на разбирането на списъка е 2.85 пъти по-бързо, отколкото за цикъл и 1.87 пъти по-бързо от метода на картата. Разбиранията в списъка оставят след себе си други методи с голям запас. Може да има спекулации, защо тогава просто не използваме LC на всички места, а не на вериги? LC в повечето случаи е по-бърз и може да замени контурите в почти 80% случаи. Но ние не можем да заменим контурите, има някои случаи, когато имаме някои добри условия, а класовете са вложени в цикъл. В тези случаи използването на LC може да бъде доста тромаво и невъзможно също. По-добре е да отидете на бримки в такива ситуации. Въпреки че човек може да използва списъка разбиране за цикли, за да замени други за цикли. Това ще намали времето за изпълнение, както и ще поддържа удобството на потребителя на кода.

  • Ние можем да вложим множество условия в разбирането на списъка.
  • LC може да извърши множество променливи манипулации.
  • Не е необходимо да предоставяте отделна команда, за да получите изход.
  • Разбиранията на списъка намаляват сложността на кода.
  • Разбирането на списъка е ефективно.

заключение

Разбирането на списъците се използва за създаване на списъци от итеративния процес. Разбиранията на списъка са лесни за разбиране / изпълнение и правят код елегантен. Разбиранията на списъците са компактни и лесни за използване.

Обсъдихме синтаксис за разбиране на списъка, заедно с някои добри проницателни примери. Най-накрая написахме една програма, за да вземем времето от всеки метод. Заключихме, че LC е 2, 85 пъти по-бърз, отколкото за цикъл и 1, 87 пъти по-бърз от метода map ().

Препоръчителни статии

Това е ръководство за разбиране на списъка на Python. Тук обсъждаме ползите от разбирането на списъка на python, заедно със синтаксиса и примери с различни условия. Можете също да разгледате следните статии, за да научите повече-

  1. Конструктор в Java
  2. Сортиране в Java
  3. Конструктор в Java
  4. JCheckBox на Java
  5. Ръководство за сортиране в C # с примери
  6. Функция за сортиране в Python с примери
  7. Цикли в VBScript с примери
  8. Примери за внедряване на квадратчето за отметка в Bootstrap