wa12rior

10.12.2019 Python

Dec 10th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. import timeit
  2.  
  3. MAX_EXPONENT = 15
  4. NUMBER = 10
  5.  
  6. # define tests
  7. TEST_IN = '''
  8. found = 0
  9. for x in needles:
  10.    if x in haystack:
  11.        found += 1
  12. '''
  13. TEST_SETS = '''
  14. len(needles & haystack)
  15. '''
  16. TEST_SETS_F_LITS = '''
  17. len(set(needles) & set(haystack))
  18. '''
  19.  
  20. # define setups
  21. SETUP_LISTS = '''
  22. import random
  23. random.seed(81)
  24. haystack = [random.random()
  25.            for _ in range({size})]
  26. needles = ([random.random()
  27.            for _ in range(500)]
  28.           + random.sample(haystack, 500))
  29. '''
  30. SETUP_SETS = '''
  31. import random
  32. random.seed(81)
  33. haystack = set(random.random()
  34.            for _ in range({size}))
  35. needles = (set(random.random()
  36.            for _ in range(500))
  37.           | set(random.sample(haystack, 500)))
  38. '''
  39.  
  40. # combine tests and setups
  41. tests = [('in_lists',        TEST_IN,          SETUP_LISTS),
  42.          ('in_sets',         TEST_IN,          SETUP_SETS),
  43.          ('sets',            TEST_SETS,        SETUP_SETS),
  44.          ('sets_from_lists', TEST_SETS_F_LITS, SETUP_LISTS)]
  45.  
  46. #timeit.timeit(TEST_IN,
  47. #              setup=SETUP_SETS.format(size=2**10),
  48. #              number=NUMBER)
  49.  
  50. # perform tests and print results
  51. print('{} {} {}'.format('name', 'time', 'factor'))
  52.  
  53. for n in range(10, MAX_EXPONENT+1):
  54.     size = 2**n
  55.     print(40*'-')
  56.     print('size =', size)
  57.  
  58.     results = [(name,
  59.         timeit.timeit(test, setup=setup.format(size=size), number=NUMBER))
  60.         for name, test, setup in tests]
  61.  
  62.     t_ref = results[0][1]
  63.    
  64.     for name, t in results:
  65.         print('{:14} {:12.4f} {:11.2f}'.format(name, t, t_ref/t))
  66.  
  67.  
  68. -------------------------------------------------------------------------
  69.  
  70. >>> lambda a,b: a+b
  71. <function <lambda> at 0x000001F58C698168>
  72. >>> f = lambda a,b: a+b
  73. >>> f
  74. <function <lambda> at 0x000001F58C698288>
  75. >>> lambda 3,4: a+b
  76. SyntaxError: invalid syntax
  77. >>> (lambda a,b: a+b)(12, 15)
  78. 27
  79. >>> def stworz_inc(n):
  80.     return (lambda x: x+n)(4)
  81.  
  82. >>> stworz_inc(3)
  83. 7
  84. >>> stworz_inc(10)
  85. 14
  86. >>> def stworz_inc(n):
  87.     return lambda x: x+n
  88.  
  89. >>> f10 = stworz_inc(10)
  90. >>> f5 = stworz_inc(5)
  91. >>> f1 = stworz_inc(1)
  92. >>> x = 4
  93. >>> f10(x), f5(x), f1(x)
  94. (14, 9, 5)
  95. -------------------------
  96. >>> for f in [f1,f5,f10]:
  97.     print(f(x))
  98. 5
  99. 9
  100. 14
  101. --------------------------
  102. pary = [
  103.     (3, 'trzy'),
  104.     (1, 'jeden'),
  105.     (2, 'dwa'),
  106.     (4, 'cztery'),
  107. ]
  108.  
  109. >>> sorted(pary)
  110. [(1, 'jeden'), (2, 'dwa'), (3, 'trzy'), (4, 'cztery')]
  111. >>> pary.sort()
  112. >>> pary
  113. [(1, 'jeden'), (2, 'dwa'), (3, 'trzy'), (4, 'cztery')]
  114. >>>
  115.  
  116. -----------------------
  117. sorted(pary, key=lambda x: x[1])
  118. [(4, 'cztery'), (2, 'dwa'), (1, 'jeden'), (3, 'trzy')]
  119. >>> sorted(pary, key=lambda x: x[1][-1])
  120. [(2, 'dwa'), (1, 'jeden'), (3, 'trzy'), (4, 'cztery')]
  121. >>> sorted(pary, key=lambda x: abs(x[0]))
  122. [(1, 'jeden'), (2, 'dwa'), (3, 'trzy'), (4, 'cztery')]
Add Comment
Please, Sign In to add comment