Содржина на објавата
Как разделить один список на два по определённому признаку элементов? Самый очевидный способ выглядит так: array = [1, 2, 3, 4, 5, 6, 7, 8, 9] even, odd = [], [] for item in array: if item%2: odd.append(item) else: even.append(item) Смотрим что получается >>> odd [1, 3, 5, 7, 9] >>> even [2, 4, 6, 8] А теперь способ в одну строку! (ну кто бы сомневался😂) _ = [[even.append, odd.append][x%2](x) for x in array] Я специально сохранил результат в переменную "_", так как этот результат нам не нужен. Вся магия происходит во время выполнения генератора списка. Выражение x%2 возвращает нам 1 или 0, что является индексом списка [even.append, odd.append]. Таким образом происходит выбор метода append() для нужного списка и сразу после этого мы вызываем его, отправляя очередной элемент в выбранный список. Точно так же в выражение можно ставить сравнение, которое вернёт bool. Ведь вы помните, что bool это производный тип от int, а значит True это 1 а False это 0. >>> arr = [100, 200] >>> print(arr[True]) 200 >>> print(arr[False]) 100 В нашем случае можно сделать так more, less = [], [] [[less.append, more.append][x>5](x) for x in array] Можно даже никуда не сохранять результат, всё равно то что нам нужно произойдет. >>> print(more, less) [6, 7, 8, 9], [1, 2, 3, 4, 5] #tricks