Разбиране на списъка на Python (с примери)

В тази статия ще научим за разбирането на списъка на Python и как да го използваме.

Списък на разбирането срещу за цикъл в Python

Да предположим, че искаме да отделим буквите на думата humanи да добавим буквите като елементи от списък. Първото нещо, което идва на ум, би било използването на цикъл.

Пример 1: Итерация през низ с помощта на Loop

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

Когато стартираме програмата, изходът ще бъде:

 ('човек')

Въпреки това, Python има по-лесен начин да реши този проблем, като използва разбирането на списъци. Разбирането на списъци е елегантен начин за дефиниране и създаване на списъци въз основа на съществуващи списъци.

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

Пример 2: Итерация през низ с използване на разбиране на списъка

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

Когато стартираме програмата, изходът ще бъде:

 ('човек')

В горния пример, нов списък се присвоява на променлива h_letters и списъкът съдържа елементите на итерируемия низ „човек“. Извикваме print()функция, за да получим изхода.

Синтаксис на разбиране на списъка

 (израз за елемент в списъка)

Вече можем да определим къде се използват разбирането на списъците.

Ако сте забелязали, това humanе низ, а не списък. Това е силата на разбирането на списъка. Той може да идентифицира кога получава низ или кортеж и да работи върху него като списък.

Можете да направите това с помощта на цикли. Не всеки цикъл обаче може да бъде пренаписан като разбиране на списъка. Но докато се учите и се чувствате добре с разбирането на списъка, ще откриете, че замествате все повече и повече цикли с този елегантен синтаксис.

Списък на разбирането срещу функциите на Lambda

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

Пример 3: Използване на ламбда функции в списъка

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

Когато стартираме програмата, изходът ще бъде

 ('човек')

Разбиранията на списъците обаче обикновено са по-четими от хората, отколкото ламбда функциите. По-лесно е да се разбере какво програмистът се е опитвал да постигне, когато се използват разбиране на списъка.

Условни в разбирането на списъка

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

Пример 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: ако … друго С разбиране на списъка

 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 не може да бъде пренаписано под формата на разбиране на списъка.

Интересни статии...