← Все вопросы

Как разбить список чисел на чётные и нечётные?

Задан 14 месяцев назад431 просмотров2 ответа
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 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект