элемент появляется в одной или другой позиции кортежа.Моя текущая цель немного сложна, поэтому я разделил проблему на три более мелких этапа.
1. Начнем с самого простого случая: только одно значение, которое применяется только к первому элементу кортежа.
Например:
Код: Выделить всё
my_filter([(1,2),(1,3),(2,4),(3,1),(3,4),(3,5),(5,2),(5,4)], 2)
Код: Выделить всё
[(1,2),(1,3),(5,2),(5,4)]
Наивный способ это делается так: для каждого первого элемента кортежа в списке подсчитайте, сколько раз этот элемент появляется в качестве первого элемента во всех кортежах, и, если счетчик соответствует выбранному числу, добавьте все кортежи, имеющие этот элемент в первой позиции.
Но мне кажется, что это настолько неоптимально, и мне приходится перебирать список для каждого возможного значения, что я наверняка упускаю лучший способ сделать это.
2. Сделайте это взаимным
В идеале хотелось бы иметь возможность применять ту же обработку на основе второго элемента кортежа, но с другим параметром мощности
Например:
Код: Выделить всё
my_filter([(1,2),(1,3),(2,4),(3,1),(3,4),(3,5),(5,2),(5,4)], 2, 1)
Код: Выделить всё
[(1,3)]
Код: Выделить всё
my_filter([(1,2),(1,3),(2,4),(3,1),(3,4),(3,5),(5,2),(5,4)], 2, [1,3])
Код: Выделить всё
[(1,3),(5,4)]
Мне кажется, что в библиотеке itertools могут быть некоторые полезные функции, но она меня не устраивает. Любой совет ? Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/788 ... y-property