Rozumienie list w Pythonie (z przykładami)

W tym artykule dowiemy się o składaniu list w języku Python oraz o tym, jak z niego korzystać.

Zrozumienie listy a pętla For w Pythonie

Załóżmy, że chcemy oddzielić litery słowa humani dodać je jako pozycje listy. Pierwszą rzeczą, która przychodzi na myśl, byłoby użycie pętli for.

Przykład 1: Iterowanie po łańcuchu przy użyciu pętli for

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

Kiedy uruchomimy program, wynik będzie:

 ('człowiek')

Jednak Python ma łatwiejszy sposób rozwiązania tego problemu za pomocą funkcji List Compression. Zrozumienie list to elegancki sposób definiowania i tworzenia list na podstawie istniejących list.

Zobaczmy, jak można napisać powyższy program przy użyciu wyrażeń listowych.

Przykład 2: Przechodzenie przez ciąg znaków przy użyciu funkcji List Compression

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

Kiedy uruchomimy program, wynik będzie:

 ('człowiek')

W powyższym przykładzie nowa lista jest przypisana do zmiennej h_letters, a lista zawiera elementy iterowalnego ciągu „human”. Wzywamy print()funkcję, aby otrzymać wynik.

Składnia rozumienia listy

 (wyrażenie dla pozycji na liście)

Możemy teraz określić, gdzie używane są wyrażenia listowe.

Jeśli zauważyłeś, humanto ciąg znaków, a nie lista. To jest siła rozumienia list. Potrafi zidentyfikować, kiedy otrzyma ciąg lub krotkę i pracować nad nią jak na liście.

Możesz to zrobić za pomocą pętli. Jednak nie każdą pętlę można przepisać jako rozumienie listy. Ale kiedy nauczysz się i zaznajomisz się ze składaniem list, zauważysz, że będziesz zastępować coraz więcej pętli tą elegancką składnią.

Listy składane a funkcje Lambda

Listy składane nie są jedynym sposobem pracy z listami. Różne funkcje wbudowane i funkcje lambda mogą tworzyć i modyfikować listy w mniejszych wierszach kodu.

Przykład 3: Użycie funkcji Lambda w Liście

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

Kiedy uruchomimy program, wynik będzie

 ('człowiek')

Jednak listy składane są zwykle bardziej czytelne dla człowieka niż funkcje lambda. Łatwiej jest zrozumieć, co programista próbował osiągnąć, gdy używane są wyrażenia listowe.

Warunki warunkowe w zrozumieniu listy

Listy składane mogą wykorzystywać instrukcję warunkową do modyfikowania istniejącej listy (lub innych krotek). Stworzymy listę, która będzie używać operatorów matematycznych, liczb całkowitych i zakresu ().

Przykład 4: używanie if ze zrozumieniem listy

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

Kiedy uruchomimy powyższy program, wynik będzie:

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

Lista liczba_lista zostanie wypełniona pozycjami z zakresu od 0 do 19, jeśli wartość pozycji jest podzielna przez 2.

Przykład 5: Zagnieżdżone IF ze zrozumieniem listy

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

Kiedy uruchomimy powyższy program, wynik będzie:

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

Tutaj lista testów ze zrozumieniem:

  1. Czy y jest podzielne przez 2, czy nie?
  2. Czy y jest podzielne przez 5, czy nie?

Jeśli y spełnia oba warunki, y jest dołączane do num_list.

Przykład 6: jeśli… else Ze zrozumieniem listy

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

Kiedy uruchomimy powyższy program, wynik będzie:

 („Parzysty”, „Nieparzysty”, „Parzysty”, „Nieparzysty”, „Parzysty”, „Nieparzysty”, „Parzysty”, „Nieparzysty”, „Parzysty”, „Nieparzysty”)

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.
  • Pamiętaj, że każde zrozumienie listy może zostać przepisane w pętli for, ale nie każda pętla for nie może zostać przepisana w formie listy złożonej.

Interesujące artykuły...