← Все вопросы
Как разбить список чисел на чётные и нечётные?
9
Есть список целых, хочу получить два списка: отдельно чётные, отдельно нечётные. Или вообще сгруппировать по какому-то условию. Как покомпактнее?
2 ответа
17
Два comprehension в лоб — это нормально и читаемо:
nums = [1, 2, 3, 4, 5, 6]
evens = [x for x in nums if x % 2 == 0]
odds = [x for x in nums if x % 2 == 1]
Если не хочется проходить список дважды, можно один раз через словарь/defaultdict:
from collections import defaultdict
groups = defaultdict(list)
for x in nums:
groups[x % 2].append(x)
# groups[0] — чётные, groups[1] — нечётные
5
Для произвольного условия удобен itertools.groupby, но он группирует только подряд идущие одинаковые ключи, так что список сначала надо отсортировать по этому ключу. Для «чётные/нечётные» проще defaultdict.
Дмитрий Семочкин Про обязательную сортировку перед groupby постоянно забывают · 13 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.