Разделение списка по фильтру в Python

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В Python мы можем разделить список на две группы на основе заданного фильтра. Это можно сделать с использованием списочного выражения и функции zip(). В этом испытании вам будет предложено написать функцию, которая принимает список и фильтр в качестве входных данных и возвращает два списка, один из которых содержит элементы, прошедшие фильтр, а другой - элементы, не прошедшие его.

Разделить список на две части

Напишите функцию bifurcate(lst, filter), которая принимает список lst и фильтр filter в качестве входных данных и возвращает список из двух списков. Первый список должен содержать элементы lst, которые проходят фильтр, а второй список - элементы, которые не проходят его.

Для реализации этой функции можно использовать списочное выражение и функцию zip(). Функция zip() принимает два или более списков в качестве входных данных и возвращает список кортежей, где каждый кортеж содержит соответствующие элементы из каждого списка. Например, zip([1, 2, 3], [4, 5, 6]) возвращает [(1, 4), (2, 5), (3, 6)].

Можно использовать эту функцию для одновременного перебора как lst, так и filter и добавления элементов в соответствующий список в зависимости от того, проходят они фильтр или нет.

def bifurcate(lst, filter):
  return [
    [x for x, flag in zip(lst, filter) if flag],
    [x for x, flag in zip(lst, filter) if not flag]
  ]
bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True])
## [ ['beep', 'boop', 'bar'], ['foo'] ]

Резюме

В этом испытании вы узнали, как разделить список на две группы на основе заданного фильтра. Вы использовали списочное выражение и функцию zip() для одновременного перебора как списка, так и фильтра и добавления элементов в соответствующий список в зависимости от того, проходят они фильтр или нет.