Понимание списка Python (с примерами)

В этой статье мы узнаем о понимании списков Python и о том, как его использовать.

Понимание списка и цикл For в Python

Предположим, мы хотим разделить буквы слова humanи добавить буквы как элементы списка. Первое, что приходит в голову, - это использовать цикл for.

Пример 1: Итерация строки с использованием цикла for

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

Когда мы запустим программу, вывод будет:

 ('человек')

Однако у Python есть более простой способ решить эту проблему, используя List Computing. Понимание списков - это элегантный способ определения и создания списков на основе существующих списков.

Давайте посмотрим, как описанная выше программа может быть написана с использованием списков.

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

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

Когда мы запустим программу, вывод будет:

 ('человек')

В приведенном выше примере новый список назначается переменной h_letters, а список содержит элементы повторяющейся строки «human». Мы вызываем print()функцию, чтобы получить результат.

Синтаксис понимания списка

 (выражение для элемента в списке)

Теперь мы можем определить, где используются списки.

Если вы заметили, humanэто строка, а не список. В этом сила понимания списка. Он может определить, когда он получает строку или кортеж, и работать с ними как со списком.

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

Составление списков и лямбда-функции

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

Пример 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: 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 нельзя переписать в форме понимания списка.

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