Black_Rabbit

multifilter

Nov 17th, 2019
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.51 KB | None | 0 0
  1. class multifilter:
  2.     def judge_half(pos, neg):   # допускает элемент, если его допускает хотя бы половина фукнций (pos >= neg)
  3.         return pos>= neg
  4.  
  5.     def judge_any(pos, neg):    # допускает элемент, если его допускает хотя бы одна функция (pos >= 1)
  6.         return pos >= 1
  7.  
  8.     def judge_all(pos, neg):    # допускает элемент, если его допускают все функции (neg == 0)
  9.         return neg == 0
  10.  
  11.     def __init__(self, iterable, *funcs, judge=judge_any):
  12.         self.iterable = iterable
  13.         self.funcs = funcs
  14.         self.judge = judge
  15.  
  16.     def __iter__(self):
  17.         pos, neg = 0, 0
  18.         for i in self.iterable:
  19.             for j in self.funcs:
  20.                 if j(i):
  21.                     pos += 1
  22.                 else:
  23.                     neg += 1
  24.             if self.judge(pos, neg):
  25.                 yield i
  26.             pos, neg = 0, 0
  27.  
  28.  
  29.  
  30.  
  31.  
  32. def mul2(x):
  33.     return x % 2 == 0
  34.  
  35. def mul3(x):
  36.     return x % 3 == 0
  37.  
  38. def mul5(x):
  39.     return x % 5 == 0
  40.  
  41.  
  42. a = [i for i in range(31)] # [0, 1, 2, ... , 30]
  43.  
  44. print(list(multifilter(a, mul2, mul3, mul5)))
  45. # [0, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30]
  46.  
  47. print(list(multifilter(a, mul2, mul3, mul5, judge=multifilter.judge_half)))
  48. # [0, 6, 10, 12, 15, 18, 20, 24, 30]
  49.  
  50. print(list(multifilter(a, mul2, mul3, mul5, judge=multifilter.judge_all)))
  51. # [0, 30]
Add Comment
Please, Sign In to add comment