Розуміння списку 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)]> Відобразити суму цифр усіх непарних елементів у списку.
У цьому прикладі ми створили список і знаходимо суму цифр кожного непарного елемента в списку.
java переміщення до внутр
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]>