Так как это не было упомянуто только для завершения.
Хороший старый фильтр для фильтрации фильтруемых элементов.
Функциональное программирование
####### Set Up #######
class X:
def __init__(self, val):
self.val = val
elem = 5
my_unfiltered_list = [X(1), X(2), X(3), X(4), X(5), X(5), X(6)]
####### Set Up #######
### Filter one liner ### filter(lambda x: condition(x), some_list)
my_filter_iter = filter(lambda x: x.val == elem, my_unfiltered_list)
### Returns a flippin' iterator at least in Python 3.5 and that's what I'm on
print(next(my_filter_iter).val)
print(next(my_filter_iter).val)
print(next(my_filter_iter).val)
### [1, 2, 3, 4, 5, 5, 6] Will Return: ###
# 5
# 5
# Traceback (most recent call last):
# File "C:\Users\mousavin\workspace\Scripts\test.py", line 22, in <module>
# print(next(my_filter_iter).value)
# StopIteration
# You can do that None stuff or whatever at this point, if you don't like exceptions.
Я знаю, что обычно в списках Python предпочтения или, по крайней мере,
это то, что я читаю, но я не вижу проблемы, если честно. Конечно, Python не является языком FP, но Map / Reduce / Filter отлично читаются и являются наиболее стандартными из стандартных вариантов использования в функциональном программировании.
Итак, поехали. Знай свое функциональное программирование.
список условий фильтрации
Это не станет легче, чем это:
next(filter(lambda x: x.val == value, my_unfiltered_list)) # Optionally: next(..., None) or some other default value to prevent Exceptions