Обычно, в таких случаях более наглядно смотрится функция map():
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]Проверяем результат
more, less = [], []
map(lambda x: [less.append, more.append][x>5](x), array)
>>> print(more, less)Хм, не сработало! Что произошло? Почему итерация не запустилась?
[] []
Дело в том, что в Python3 многие итеративные функции (если не все) стали генераторами. А что такое генератор? Это не тот генератор списка который List Comprehensions, а именно Generator.
Объект, который внутри себя имеет алгоритм получения следующего элемента и он не станет запускать итерацию пока мы не начнём запрашивать эти элементы.
Что возвращает функция map()?
>>> print(map(...))Тоже самое произошло и с функцией range
<map object at 0x0000023114ADE3C8>
>>> print(range(10))Значит всё что остаётся, это запустить итерацию по элементам генератора. Как это сделать максимально коротко?
range(0, 10)
Можно просто в цикле for
for _ in map(...): passЛибо конвертнуть в список
list(map(...))Или оператором *
[*map(...)]Ну а полностью будет выглядеть так
[*map(lambda x: [less.append, more.append][x>5](x), array)]Теперь генератор сразу вычисляется. Хотя, как по мне, такая запись менее "читабельна")
#tricks