Python – Розуміння списку

Розуміння списку Python складається з дужок, що містять вираз, який виконується для кожного елемента разом із циклом for для повторення кожного елемента в списку Python.

приклад:

Python




numbers> => [> 12> ,> 13> ,> 14> ,]> doubled> => [x> *> 2> for> x> in> numbers]> print> (doubled)>

Вихід

[24, 26, 28] 

Синтаксис розуміння списку Python

Синтаксис: newList = [ вираз (елемент) для елемент в старий список якщо хвороба ]

Параметр:

    вираз : представляє операцію, яку ви хочете виконати над кожним елементом у межах iterable. елемент : Термін змінна відноситься до кожного значення, взятого з ітерованого. iterable : вкажіть послідовність елементів, через які ви хочете виконати ітерацію (наприклад, список, кортеж або рядок). умова : (Необов’язково) Фільтр допомагає вирішити, чи слід додавати елемент до нового списку.

Повернення: Поверненим значенням розуміння списку є новий список, що містить модифіковані елементи, які задовольняють заданим критеріям.

Python List comprehension забезпечує набагато коротший синтаксис для створення нового списку на основі значень існуючого списку.

Розуміння списку в прикладі Python

Ось приклад використання розуміння списку для знаходження квадрата числа в Python.

Python




numbers> => [> 1> ,> 2> ,> 3> ,> 4> ,> 5> ]> squared> => [x> *> *> 2> for> x> in> numbers]> print> (squared)>

Вихід

[1, 4, 9, 16, 25] 

Ітерація з розумінням списку

У цьому прикладі ми призначаємо 1, 2 і 3 списку та друкуємо список за допомогою Розуміння списку.

Python




# Using list comprehension to iterate through loop> List> => [character> for> character> in> [> 1> ,> 2> ,> 3> ]]> > # Displaying list> print> (> List> )>

Вихід

[1, 2, 3] 

Парний список за допомогою List Comprehension

У цьому прикладі ми друкуємо парні числа від 0 до 10 за допомогою розуміння списку.

Python




list> => [i> for> i> in> range> (> 11> )> if> i> %> 2> => => 0> ]> print> (> list> )>

Вихід

[0, 2, 4, 6, 8, 10] 

Матриця з використанням List Comprehension

У цьому прикладі ми призначаємо цілі числа від 0 до 2-3 рядків матриці та друкуємо її за допомогою Розуміння списку.

Python




matrix> => [[j> for> j> in> range> (> 3> )]> for> i> in> range> (> 3> )]> > print> (matrix)>

Вихід

[[0, 1, 2], [0, 1, 2], [0, 1, 2]] 

Розуміння списків проти циклу For

Існують різні способи проходження списку. Однак найпоширенішим підходом є використання для петля . Давайте розглянемо наведений нижче приклад:

Python




# Empty list> List> => []> > # Traditional approach of iterating> for> character> in> 'Geeks 4 Geeks!'> :> > List> .append(character)> > # Display list> print> (> List> )>

Вихід

['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!'] 

Вище наведено реалізацію традиційного підходу до перебору списку, рядка, кортежу тощо. Тепер розуміння списків у Python виконує те саме завдання, а також робить програму більш простою.

Розуміння списків транслює традиційний ітераційний підхід за допомогою для циклу у просту формулу, що робить їх простими у використанні. Нижче наведено підхід до перебору списку, рядка, кортежу тощо за допомогою розуміння списку в Python.

Python




# Using list comprehension to iterate through loop> List> => [character> for> character> in> 'Geeks 4 Geeks!'> ]> > # Displaying list> print> (> List> )>

Вихід

['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!'] 

Аналіз часу в списках і циклі

Розуміння списків у Python ефективніше як з точки зору обчислень, так і з точки зору простору та часу кодування, ніж цикл for. Як правило, вони записуються в один рядок коду. Наведена нижче програма показує різницю між циклами та розумінням списку на основі продуктивності.

Python




# Import required module> import> time> > > # define function to implement for loop> def> for_loop(n):> > result> => []> > for> i> in> range> (n):> > result.append(i> *> *> 2> )> > return> result> > > # define function to implement list comprehension> def> list_comprehension(n):> > return> [i> *> *> 2> for> i> in> range> (n)]> > > # Driver Code> > # Calculate time taken by for_loop()> begin> => time.time()> for_loop(> 10> *> *> 6> )> end> => time.time()> > # Display time taken by for_loop()> print> (> 'Time taken for_loop:'> ,> round> (end> -> begin,> 2> ))> > # Calculate time takens by list_comprehension()> begin> => time.time()> list_comprehension(> 10> *> *> 6> )> end> => time.time()> > # Display time taken by for_loop()> print> (> 'Time taken for list_comprehension:'> ,> round> (end> -> begin,> 2> ))>

Вихід

Time taken for_loop: 0.39 Time taken for list_comprehension: 0.35 

З наведеної вище програми ми бачимо, що розуміння списків відбувається набагато швидше, ніж цикл for.

Розуміння вкладених списків

Розуміння вкладених списків є нічим іншим, як розумінням списку в межах іншого розуміння списку, яке дуже схоже на вкладені цикли for. Нижче наведено програму, яка реалізує вкладений цикл:

Python




matrix> => []> > for> i> in> range> (> 3> ):> > > # Append an empty sublist inside the list> > matrix.append([])> > > for> j> in> range> (> 5> ):> > matrix[i].append(j)> > print> (matrix)>

Вихід

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

Тепер, використовуючи розуміння вкладених списків, той самий результат може бути згенерований у меншій кількості рядків коду.

Python




# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 3> )]> > print> (matrix)>

Вихід

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

Розуміння списків і лямбда

Лямбда-вирази є не чим іншим, як скороченим представленням функцій Python. Використання розуміння списків із лямбда створює ефективну комбінацію. Давайте розглянемо наведені нижче приклади.

У цьому прикладі ми вставляємо числа від 10 до 50 у список і друкуємо його.

Python




# using lambda to print table of 10> numbers> => []> > for> i> in> range> (> 1> ,> 6> ):> > numbers.append(i> *> 10> )> > print> (numbers)>

Вихід

[10, 20, 30, 40, 50] 

Тут ми використали цикл for для друку таблиці з 10.

Python




numbers> => [i> *> 10> for> i> in> range> (> 1> ,> 6> )]> > print> (numbers)>

Вихід

[10, 20, 30, 40, 50] 

Тепер тут ми використали лише розуміння списку, щоб відобразити таблицю з 10.

Python




# using lambda to print table of 10> numbers> => list> (> map> (> lambda> i: i> *> 10> , [i> for> i> in> range> (> 1> ,> 6> )]))> > print> (numbers)>

Вихід

[10, 20, 30, 40, 50] 

Нарешті, ми використовуємо лямбда + розуміння списку для відображення таблиці з 10. Ця комбінація дуже корисна для отримання ефективних рішень у меншій кількості рядків коду для складних проблем.

Умовні слова в розумінні списків

Ми також можемо додати умовні оператори до розуміння списку. Ми можемо створити список за допомогою діапазон(), оператори і т. д. і cal також застосовують деякі умови до списку за допомогою оператор if .

Ключові моменти

  • Розуміння списку є ефективним засобом опису та побудови списків на основі поточних списків.
  • Як правило, розуміння списків є легким і простішим, ніж стандартні функції формування списків і цикли.
  • Ми не повинні писати довгі коди для розуміння списків, щоб забезпечити зручний для користувача код.
  • Кожне розуміння списку можна переписати в циклі for, але в контексті інтерпретації списку кожен цикл for не можна переписати.

Нижче наведено кілька прикладів, які зображують використання розуміння списків, а не традиційний підхід до ітерації через iterable:

Розуміння списку Python за допомогою If-else.

У прикладі ми перевіряємо, що від 0 до 7, якщо число парне, тоді вставте Парне число до списку ще вставити Непарне число до списку.

Python




lis> => [> 'Even number'> if> i> %> 2> => => 0> > else> 'Odd number'> for> i> in> range> (> 8> )]> print> (lis)>

Вихід

['Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number'] 

Вкладений IF із розумінням списку

У цьому прикладі ми вставляємо в список числа, кратні від 10 до 100, і друкуємо його.

Python




lis> => [num> for> num> in> range> (> 100> )> > if> num> %> 5> => => 0> if> num> %> 10> => => 0> ]> print> (lis)>

Вихід

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 

Покажіть квадрат чисел від 1 до 10

У цьому прикладі ми вставляємо квадрат від 1 до 10 до списку та друкуємо список.

Python




# Getting square of number from 1 to 10> squares> => [n> *> *> 2> for> n> in> range> (> 1> ,> 11> )]> > # Display square of even numbers> print> (squares)>

Вихід

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

Відображення транспонування 2D-матриці

У цьому прикладі ми транспонуємо матрицю за допомогою розуміння списку.

Python




# Assign matrix> twoDMatrix> => [[> 10> ,> 20> ,> 30> ],> > [> 40> ,> 50> ,> 60> ],> > [> 70> ,> 80> ,> 90> ]]> > # Generate transpose> trans> => [[i[j]> for> i> in> twoDMatrix]> for> j> in> range> (> len> (twoDMatrix[> 0> ]))]> > print> (trans)>

Вихід

[[10, 40, 70], [20, 50, 80], [30, 60, 90]] 

Перемикання регістру кожного символу в рядку

У цьому прикладі ми змінюємо регістр кожного символу в заданому рядку за допомогою оператора XOR із 32 і зберігаємо результат у списку.

Python




# Initializing string> string> => 'Geeks4Geeks'> > # Toggle case of each character> List> => list> (> map> (> lambda> i:> chr> (> ord> (i) ^> 32> ), string))> > # Display list> print> (> List> )>

Вихід

['g', 'E', 'E', 'K', 'S', 'x14', 'g', 'E', 'E', 'K', 'S'] 

Переверніть кожен рядок у кортеж

У цьому прикладі ми змінюємо рядки в циклі for, вставляємо їх у список і друкуємо список.

Python




# Reverse each string in tuple> List> => [string[::> -> 1> ]> for> string> in> (> 'Geeks'> ,> 'for'> ,> 'Geeks'> )]> > # Display list> print> (> List> )>

Вихід

['skeeG', 'rof', 'skeeG'] 

Створення списку кортежів із двох окремих списків

У цьому прикладі ми створили два списки імена та вік. Ми використовуємо zip() у розуміння списку, і ми вставляємо ім’я та вік як кортеж до списку. Нарешті, ми друкуємо список кортежів.

Python




names> => [> 'G'> ,> 'G'> ,> 'g'> ]> ages> => [> 25> ,> 30> ,> 35> ]> person_tuples> => [(name, age)> for> name, age> in> zip> (names, ages)]> print> (person_tuples)>

Вихід:

[('G', 25), ('G', 30), ('g', 35)] 

Відобразити суму цифр усіх непарних елементів у списку.

У цьому прикладі ми створили список і знаходимо суму цифр кожного непарного елемента в списку.

Python




# Explicit function> def> digitSum(n):> > dsum> => 0> > for> ele> in> str> (n):> > dsum> +> => int> (ele)> > return> dsum> > > # Initializing list> List> => [> 367> ,> 111> ,> 562> ,> 945> ,> 6726> ,> 873> ]> > # Using the function on odd elements of the list> newList> => [digitSum(i)> for> i> in> List> if> i &> 1> ]> > # Displaying new list> print> (newList)>

Вихід

[16, 3, 18, 18] 

Переваги розуміння списку

  • Ефективніший час і простір, ніж цикли.
  • Вимагайте менше рядків коду.
  • Перетворює ітераційний оператор у формулу.

Запитання до вправи на розуміння списку Python

Нижче наведено два запитання для вправи на розуміння списку Python. Ми розглянули основний код розуміння списків для пошуку куба чисел і код для визначення довжини слова за допомогою розуміння списків і функції len().

Q1. Запитання для вправи «Куб чисел» із використанням розуміння списку

Python




numbers> => [> 1> ,> 2> ,> 3> ,> 4> ,> 5> ,> 6> ,> 7> ,> 8> ,> 9> ,> 10> ]> cube> => [number> *> *> 3> for> number> in> numbers]> print> (cube)>

Вихід

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] 

Q2. Питання для вправи на визначення довжини слова за допомогою розуміння списку

Python




words> => [> 'apple'> ,> 'banana'> ,> 'cherry'> ,> 'orange'> ]> word_lengths> => [> len> (word)> for> word> in> words]> print> (word_lengths)>

Вихід

[5, 6, 6, 6]