List comprehension — это упрощенная генерация списка (в одну строку) через цикл for и условия.
Пример 1
В оригинальном списке с ценами на товары произошел сбой и вместо обнуления цены уже проданного товара она была записана со знаком минус. Необходимо это недоразумение исправить.
Оригинальный список: [1.25, -9.45, 10.22, 3.78, -5.92, 1.16]
Получиться должен: [1.25, 0, 10.22, 3.78, 0, 1.16]
Вариант исправления:
С помощью этого кода мы генерируем список из элементов (X) последовательности первого списка если они больше нуля и нулей, если Х меньше нуля.
Пример 2
Необходимо сгенерировать список их нечетных чисел в заданном диапазоне. Например, в диапазоне от 1 до 10 конечный список должен содержать 1, 3, 5, 7, 9.
Решение:
Список генерируется из элементов (Х) последовательности от "start" до "stop + 1" если остаток от деления Х на 2 неравен нулю.
Пример 3
В компьютерной игре столкнулись три отряда. Два из них союзники и будут бить третий. Необходимо реализовать программу, которая будет считать ущерб по третьему отряду в зависимости от урона первых двух, и выдаст список убитых и выживших. Известно, что в каждом отряде по 10 юнитов. У воинов первого отряда урон рандомный в диапазоне от 50 до 80, а во втором от 30 до 60. Соответственно, если каждый юнит третьего отряда получит по 100+ урона - он погибает.
Решение:
С помощью функции randint модуля random мы наполняем первые два списка случайными десятью элементами (числами) в заданных диапазонах (от 50 до 80 и от 30 до 60), которые будут отвечать за урон каждого нападавшего. Третий список мы наполняем десятью строками "Погиб "или "Выжил", в зависимости от результата сложения двух поочередных элементов из первых списков. На выходе результат будет такого типа: ['Погиб', 'Выжил', 'Выжил', 'Погиб', 'Погиб', 'Выжил', 'Погиб', 'Погиб', 'Погиб', 'Погиб'].