Розуміння списку є однією з найдивовижніших особливостей Python . Це розумний і стислий спосіб створення списків шляхом повторення об’єкта, який можна повторювати. Розуміння вкладених списків — це не що інше, як розуміння списків у межах іншого розуміння списків, яке дуже схоже на вкладені цикли for.
Розуміння вкладеного списку в синтаксисі Python
Нижче наведено синтаксис вкладеного розуміння списку :
Синтаксис: new_list = [[вираз для елемента в списку] для елемента в списку]
Параметри:
- експресія : Вираз, який використовується для зміни кожного елемента в операторі
- пункт: Елемент у ітерабельному
- Список: Ітерований об’єкт
Приклади розуміння вкладених списків Python
Нижче наведено кілька прикладів розуміння вкладених списків:
Приклад 1: Створення матриці
У цьому прикладі ми порівняємо, як ми можемо створити матрицю коли ми його створюємо
Без розуміння списку
У цьому прикладі матриця 5×5 створюється за допомогою структури вкладеного циклу. Зовнішній цикл повторюється п’ять разів, додаючи порожні підсписки доmatrix>
, тоді як внутрішній цикл заповнює кожен підсписок значеннями в діапазоні від 0 до 4, у результаті чого утворюється матриця з послідовними цілими значеннями.
Python3
matrix> => []> for> i> in> range> (> 5> ):> > # 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], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
Використання розуміння списку
Того самого результату можна отримати за допомогою розуміння вкладеного списку лише в одному рядку. У цьому прикладі матриця 5×5 генерується за допомогою розуміння вкладеного списку. Зовнішнє розуміння повторюється п’ять разів, представляючи рядки, тоді як внутрішнє розуміння заповнює кожен рядок значеннями в діапазоні від 0 до 4, у результаті чого утворюється матриця з послідовними цілими значеннями.
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
>
>Вихід
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
Приклад 2: Фільтрування вкладеного списку за допомогою розуміння списку
Тут ми побачимо, як ми можемо фільтрувати список за допомогою та без використання розуміння списку.
Без використання розуміння списку
У цьому прикладі вкладений цикл проходить двовимірну матрицю, вилучаючи непарні числа зі списку Python у списку та додаючи їх до спискуodd_numbers>
. Отриманий список містить усі непарні елементи з матриці.
Python3
паралельна обробка
matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ,> 6> ], [> 7> ,> 8> ,> 9> ]]> odd_numbers> => []> for> row> in> matrix:> > for> element> in> row:> > if> element> %> 2> !> => 0> :> > odd_numbers.append(element)> print> (odd_numbers)> |
>
>Вихід
[1, 3, 5, 7, 9]>
Використання розуміння списку
У цьому прикладі для стислого створення списку використовується розуміння спискуodd_numbers>
шляхом ітерації елементів двовимірної матриці. Лише непарні елементи включено до результуючого списку, забезпечуючи стислу та зрозумілу альтернативу еквівалентній структурі вкладеного циклу.
Python3
matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ,> 6> ], [> 7> ,> 8> ,> 9> ]]> odd_numbers> => [> > element> for> row> in> matrix> for> element> in> row> if> element> %> 2> !> => 0> ]> print> (odd_numbers)> |
>
>Вихід
як перетворити рядок на ціле число
[1, 3, 5, 7, 9]>
приклад 3: Зведення вкладених підсписків
Без розуміння списку
У цьому прикладі двовимірний список під назвоюmatrix>
із змінною довжиною підсписку зрівнюється за допомогою вкладених циклів. Елементи з кожного підсписку послідовно додаються до спискуflatten_matrix>
, що призводить до згладженого представлення вихідної матриці.
Python3
# 2-D List> matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ], [> 6> ,> 7> ,> 8> ,> 9> ]]> flatten_matrix> => []> for> sublist> in> matrix:> > for> val> in> sublist:> > flatten_matrix.append(val)> print> (flatten_matrix)> |
>
>Вихід
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
З розумінням списку
Знову ж таки, це можна зробити за допомогою розуміння вкладеного списку, яке показано нижче. У цьому прикладі двовимірний список під назвоюmatrix>
із змінною довжиною підсписку зрівнюється за допомогою розуміння вкладеного списку. Вираз[val for sublist in matrix for val in sublist]>
стисло генерує зведений список шляхом послідовного включення кожного елемента з підсписків.
Python3
шрифт gimp
# 2-D List> matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ], [> 6> ,> 7> ,> 8> ,> 9> ]]> # Nested List Comprehension to flatten a given 2-D matrix> flatten_matrix> => [val> for> sublist> in> matrix> for> val> in> sublist]> print> (flatten_matrix)> |
>
>Вихід
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Приклад 4: Маніпулювання рядком за допомогою розуміння списку
Без розуміння списку
У цьому прикладі двовимірний список під назвоюmatrix>
що містить рядки, змінено за допомогою вкладених петлі . Внутрішній цикл робить першу літеру кожного фрукта великою, а зовнішній цикл створює новий двовимірний список,modified_matrix>
, з великими літерами, в результаті чого утворюється матриця рядків із початковими великими літерами.
Python3
matrix> => [[> 'apple'> ,> 'banana'> ,> 'cherry'> ],> > [> 'date'> ,> 'fig'> ,> 'grape'> ],> > [> 'kiwi'> ,> 'lemon'> ,> 'mango'> ]]> modified_matrix> => []> for> row> in> matrix:> > modified_row> => []> > for> fruit> in> row:> > modified_row.append(fruit.capitalize())> > modified_matrix.append(modified_row)> print> (modified_matrix)> |
>
>Вихід
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
З розумінням списку
У цьому прикладі двовимірний список під назвоюmatrix>
що містить рядки, перетворюється за допомогою розуміння вкладеного списку. Вираз[[fruit.capitalize() for fruit in row] for row in matrix]>
ефективно генерує модифіковану матрицю, де перша літера кожного фрукта написана великою, у результаті чого створюється нова матриця рядків із початковими великими літерами.
Python3
matrix> => [[> 'apple'> ,> 'banana'> ,> 'cherry'> ],> > [> 'date'> ,> 'fig'> ,> 'grape'> ],> > [> 'kiwi'> ,> 'lemon'> ,> 'mango'> ]]> modified_matrix> => [[fruit.capitalize()> for> fruit> in> row]> for> row> in> matrix]> print> (modified_matrix)> |
>
>Вихід
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>