furas

Python - functional programming - len(), sum(), avg() (Stackoverflow)

Jul 11th, 2025 (edited)
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | None | 0 0
  1. #!/usr/bin/env python3.13
  2.  
  3. # date: 2025.07.10
  4.  
  5. # [python - How to programm a function yielding average value of a list of values using functional style exclusively and preferably notable sophisticated? - Stack Overflow](https://stackoverflow.com/questions/79697123/how-to-programm-a-function-yielding-average-value-of-a-list-of-values-using-func)
  6.  
  7. # ---
  8.  
  9. # Coconut is a functional programming language that compiles to Python: https://coconut-lang.org/
  10.  
  11. # ---
  12.  
  13. data = [1, 4, 3, 5, 7]
  14.  
  15. print('len:', len(data))
  16. print('sum:', sum(data))
  17. print('avg:', sum(data)/len(data))
  18.  
  19. # -- functional ---
  20.  
  21. def f_len(data):
  22.     match data:
  23.         case ():
  24.             return 0
  25.         case (head, *tail):
  26.             return 1 + f_len(tail)
  27.  
  28. def f_sum(data):
  29.     match data:
  30.         case ():
  31.             return 0
  32.         case (head, *tail):
  33.             return head + f_sum(tail)
  34.  
  35. def f_avg(data):
  36.     return f_sum(data)/f_len(data)
  37.  
  38. print('f_len:', f_len(data))
  39. print('f_sum:', f_sum(data))
  40. print('f_avg:', f_avg(data))
  41.  
  42. # ---
  43.  
  44. # it uses previous `f_len()`
  45.  
  46. def f_avg_2(data):
  47.     return f_div_sum(data, f_len(data))
  48.  
  49. #def f_div_sum(data, num):
  50. #    return f_sum(data)/num
  51.  
  52. def f_div_sum(data, num):
  53.     match data:
  54.         case ():
  55.             return 0
  56.         case (head, *tail):
  57.             return head/num + f_div_sum(tail, num)
  58.  
  59. print('f_avg_2:', f_avg_2(data))
  60.  
  61. print('sum/len:', f_div_sum(data, f_len(data)))
  62. print('sum/2  :', f_div_sum(data, 2))
  63. print('sum/3  :', f_div_sum(data, 3))
  64. print('sum/4  :', f_div_sum(data, 4))
Advertisement
Add Comment
Please, Sign In to add comment