Python - List Comprehension (генератор списків)
List Comprehension (генератор списків)
List Comprehension (генератор списків) пропонує коротший синтаксис, коли ви хочете створити новий список на основі значень існуючого списку.
Приклад:
На основі списку фруктів вам потрібен новий список, який містить лише фрукти з літерою "а" в назві.
Без генератора списку вам доведеться написати інструкцію 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 = [x for x in fruits if "a" in x]
print(newlist)
Спробуйте самі »
Синтаксис
newlist = [expression for item in iterable if condition == True]
Поверненим значенням є новий список, який залишає старий список без змін.
Стан
Умова схожа на фільтр, який приймає лише ті елементи, які мають значення True
.
Приклад
Приймати лише ті елементи, які не є "apple":
newlist = [x for x in fruits if x != "apple"]
Спробуйте самі »
Умова if x != "apple" поверне значення True
для всіх елементів, крім "apple", завдяки чому новий список міститиме всі фрукти, крім "apple".
Умова є необов’язковою та може бути опущена:
Ітерація
Ітерація може бути будь-яким ітерованим об’єктом, як-от список, кортеж, набір тощо.
Приклад
Ви можете використовувати функцію range()
для створення ітерованого об’єкта:
newlist = [x for x in range(10)]
Спробуйте самі »
Той же приклад, але з умовою:
Вираз
Вираз є поточним елементом у ітерації, але це також результат, яким ви можете маніпулювати, перш ніж він закінчиться як елемент списку в новому списку:
Приклад
Установіть значення у новому списку у верхній регістр:
newlist = [x.upper() for x in fruits]
Спробуйте самі »
Ви можете встановити будь-який результат:
Приклад
Установіть для всіх значень у новому списку значення 'hello':
newlist = ['hello' for x in fruits]
Спробуйте самі »
Вираз також може містити умови, не як фільтр, а як спосіб маніпулювання результатом:
Приклад
Поверне "orange" замість "banana":
newlist = [x if x != "banana" else "orange" for x in fruits]
Спробуйте самі »
Вираз у прикладі вище говорить:
"Поверніть товар, якщо це не банан, якщо це банан, поверніть апельсин".