Advertisement
Guest User

Untitled

a guest
Mar 19th, 2021
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.36 KB | None | 0 0
  1. from functools import reduce
  2. import timeit
  3.  
  4. class Test:
  5.     x = 2
  6.  
  7. def id(x):
  8.     return x
  9.  
  10. def check_time(f, arg):
  11.     n = 50
  12.     return 1000 * (timeit.timeit(lambda: loop(f, id, arg), number=n) / n)  # ms
  13.  
  14. def measure(f):
  15.     xs = [list(range(10)) for _ in range(100)]
  16.     print("a)", f"{check_time(f, xs):.4f}", "ms")
  17.  
  18.     xs = [list(range(10)) for _ in range(10000)]
  19.     print("b)", f"{check_time(f, xs):.4f}", "ms")
  20.  
  21.     xs = [[Test() for _ in range(10)] for _ in range(10000)]
  22.     print("c)", f"{check_time(f, xs):.4f}", "ms")
  23.  
  24.  
  25. def loop(f, g, arg):
  26.     ys = f(g, arg)
  27.     for y in ys:
  28.         pass
  29.  
  30. def flat_map(f, xs):
  31.     ys = []
  32.     for x in xs:
  33.         ys.extend(f(x))
  34.     return ys
  35.  
  36. print("double for loop")
  37. measure(flat_map)
  38.  
  39. flat_map = lambda f, xs: [y for ys in xs for y in f(ys)]
  40. print("comprehension")
  41. measure(flat_map)
  42.  
  43. flat_map = lambda f, xs: (f(y) for ys in xs for y in ys)
  44. print("generator")
  45. measure(flat_map)
  46.  
  47. flat_map = lambda f, xs: reduce(lambda a, b: a + b, map(f, xs))
  48. print("map reduce")
  49. measure(flat_map)
  50.  
  51. flat_map = lambda f, xs: [f(x) for x in reduce(lambda a, b: a + b, xs)]
  52. print("comprehension reduce")
  53. measure(flat_map)
  54.  
  55. flat_map = lambda f, xs: sum(map(f, xs), [])
  56. print("map sum")
  57. measure(flat_map)
  58.  
  59. flat_map = lambda f, xs: [f(x) for x in sum(xs, [])]
  60. print("comprehension sum")
  61. measure(flat_map)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement