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

У цій статті ми дізнаємося про розуміння списку Python та про те, як ним користуватися.

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

Припустимо, ми хочемо відокремити букви слова humanта додати літери як елементи списку. Перше, що спадає на думку, це використання циклу for.

Приклад 1: Ітерація через рядок, використовуючи для циклу

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

Коли ми запускаємо програму, результат буде:

 ('h', 'u', 'm', 'a', 'n')

Однак Python має простіший спосіб вирішити цю проблему за допомогою розуміння списків. Розуміння списків - це елегантний спосіб визначати та створювати списки на основі існуючих списків.

Давайте подивимося, як вищезазначену програму можна написати за допомогою розуміння списків.

Приклад 2: Ітерація через рядок із використанням розуміння списку

 h_letters = ( letter for letter in 'human' ) print( h_letters)

Коли ми запускаємо програму, результат буде:

 ('h', 'u', 'm', 'a', 'n')

У наведеному вище прикладі змінний h_letters присвоєно новий список, і список містить елементи ітераційного рядка 'human'. Ми викликаємо print()функцію для отримання вихідних даних.

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

 (вираз для елемента у списку)

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

Якщо ви помітили, humanце рядок, а не список. У цьому полягає сила розуміння списку. Він може визначити, коли він отримує рядок або кортеж, і працювати над ним, як список.

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

Список розумінь проти функцій лямбда

Розуміння списків - не єдиний спосіб роботи зі списками. Різні вбудовані функції та лямбда-функції можуть створювати та модифікувати списки з меншим числом рядків коду.

Приклад 3: Використання лямбда-функцій у списку

 letters = list(map(lambda x: x, 'human')) print(letters)

Коли ми запустимо програму, результат буде

 ('h', 'u', 'm', 'a', 'n')

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

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

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

Приклад 4: Використання if із розумінням списку

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Коли ми запускаємо вищезазначену програму, результат буде:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

Список, number_list, буде заповнений елементами в діапазоні від 0-19, якщо значення елемента ділиться на 2.

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

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

Коли ми запускаємо вищезазначену програму, результат буде:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Тут перелічіть перевірки розуміння:

  1. Чи ділиться y на 2 чи ні?
  2. Чи ділиться y на 5 чи ні?

Якщо y задовольняє обом умовам, y додається до num_list.

Приклад 6: if … else З розумінням списку

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

Коли ми запускаємо вищезазначену програму, результат буде:

 ('Парне', 'непарне', 'парне', 'непарне', 'парне', 'непарне', 'парне', 'непарно', 'парне', 'непарно')

Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even is appended to the obj list. If not, Odd is appended.

Nested Loops in List Comprehension

Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.

Example 7: Transpose of Matrix using Nested Loops

 transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)

Output

 ((1, 4), (2, 5), (3, 6), (4, 8)) 

The above code use two for loops to find transpose of the matrix.

We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.

Example 8: Transpose of a Matrix using List Comprehension

 matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)

When we run the above program, the output will be:

 ((1, 3, 5, 7), (2, 4, 6, 8))

In above program, we have a variable matrix which have 4 rows and 2 columns.We need to find transpose of the matrix. For that, we used list comprehension.

**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2) is executed before row(i) for row in matrix. Hence at first, a value is assigned to i then item directed by row(i) is appended in the transpose variable.

Key Points to Remember

  • List comprehension is an elegant way to define and create lists based on existing lists.
  • List comprehension is generally more compact and faster than normal functions and loops for creating list.
  • However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
  • Пам'ятайте, кожне розуміння списку можна переписати у цикл for, але кожен цикл for не можна переписати у формі розуміння списку.

Цікаві статті...