list comprehension - завершение
Limera1n
Сегодня мы закончим изучать list comprehension.
Посмотрим на разницу в способах решения задачи, в которой нам нужно найти в двух списках числа, в сумме которые нам будут давать ноль.
Первый способ будет написан, как обычно, используя процедурный стиль программирования:

Имеется 2 списка, создается пустой список, в который будут записаны пары чисел. Создается цикл для первого и второго списка, в котором происходит сложение каждого элемента взятого из обоих списков. Создается условие, если сумма элементов равно нулю, то в список добавляются эти числа.
Долго, неправда ли?
Второй способ легче, но в выводе у него немного другое:

Здесь мы выбрали x, y, как тюплы, если сумма x+y равна нулю. В противном случае None, и мы не можем else просто опустить, в этом случае мы обязаны что-то вернуть, в данном случае None, такой синтаксис, ничего с этим не сделаешь. Дальше у нес идет привычный цикл для обоих листов, что мы создавали ранее. Выводим и получаем вот такое. None в данном случае вывелся на все те пары, в которых сумма не дает ноль.
Вот здесь уже под вопросом, на сколько выгоден list comprehension в данном случае, потому что есть ощущение, что даже процедурный вложенный for выглядит ничем не хуже, а может и лучше list comprehension. И этот list comprehension читается не легче, чем первый способ, что мы рассмотрели, особенно, если в первом способе дан легкий комментарий, описывающий для чего этот самый цикл. Поэтому нужно избегать таких list comprehension.
Как говорится, не все йогурты одинаково полезны, поэтому и не все list comprehension хороши :) Избегаем сложных и применяем простые.