Python — понимание списка


Оглавление

    Показать оглавление

Понимание списка

Понимание списка предлагает более короткий синтаксис, если вы хотите создать новый список на основе значений существующий список.

Пример :

На основе списка фруктов вам нужен новый список, содержащий только фрукты. с буквой «а» в названии.

Без понимания списка вам придется написать оператор for с условным тестом внутри:

Пример

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []

for x in fruits:
  if "a" in x:
    newlist.append(x)

print(newlist)

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []

for x in fruits:
  if "a" in x:
    newlist.append(x)

print(newlist)

Вывод результата выполнения:

['apple', 'banana', 'mango']

Благодаря пониманию списков вы можете сделать все это с помощью всего лишь одной строки кода:

Пример

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]

print(newlist)

Вывод результата выполнения:

['apple', 'banana', 'mango']

Синтаксис

newlist = [expression for item in iterable if condition == True]

Возвращаемое значение — новый список, старый список остается неизменным.

Состояние

Условие похоже на фильтр, который принимает только те элементы, значение которых соответствует Верно.

Пример

Принимайте только те товары, которые не являются «яблочными»:

newlist = [x for x in fruits if x != "apple"]

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if x != "apple"]

print(newlist)

Вывод результата выполнения:

['banana', 'cherry', 'kiwi', 'mango']

Состояние if x != "apple" вернет True для всех элементов, кроме чем «яблоко», в результате чего новый список будет содержать все фрукты, кроме «яблока».

условие не является обязательным и может быть опущено:

Пример

Без оператора if:

newlist = [x for x in fruits]

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits]

print(newlist)

Вывод результата выполнения:

['apple', 'banana', 'cherry', 'kiwi', 'mango']

Итерируемый

iterable может быть любым итерируемым объектом, например списком, кортежем, набором и т. д.

Пример

Вы можете использовать функцию range() для создания итерации:

newlist = [x for x in range(10)]

Попробуйте сами →

newlist = [x for x in range(10)]

print(newlist)

Вывод результата выполнения:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Тот же пример, но с условием:

Пример

Принимайте только числа ниже 5:

newlist = [x for x in range(10) if x < 5]

Попробуйте сами →

newlist = [x for x in range(10) if x < 5]

print(newlist)

Вывод результата выполнения:

[0, 1, 2, 3, 4]

Выражение

выражение — это текущий элемент итерации, но оно также является результат, которым вы можете манипулировать, прежде чем он превратится в элемент списка в новом список:

Пример

Установите значения в новом списке в верхний регистр:

newlist = [x.upper() for x in fruits]

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x.upper() for x in fruits]

print(newlist)

Вывод результата выполнения:

['APPLE', 'BANANA', 'CHERRY', 'KIWI', 'MANGO']

Вы можете установить результат по своему усмотрению:

Пример

Установите для всех значений в новом списке значение «привет»:

newlist = ['hello' for x in fruits]

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = ['hello' for x in fruits]

print(newlist)

Вывод результата выполнения:

['hello', 'hello', 'hello', 'hello', 'hello']

выражение также может содержать условия, но не как фильтр, а как способ манипулировать результатом:

Пример

Вернуть «апельсин» вместо «банан»:

newlist = [x if x != "banana" else "orange" for x in fruits]

Попробуйте сами →

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x if x != "banana" else "orange" for x in fruits]

print(newlist)

Вывод результата выполнения:

['apple', 'orange', 'cherry', 'kiwi', 'mango']

выражение в приведенном выше примере говорит:

"Верните товар, если это не банан; если это банан, верните оранжевый".