Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ''' str_count_sub_timing_hperf.py
- timing functions that count the number of sub_strings in a string
- using high performance time.perf_counter()
- new in Python 3.3 and higher
- '''
- import time
- import re
- def count_tony(text, sub):
- return sum(text[n:].startswith(sub)
- for n in range(len(text) - len(sub) + 1))
- def count_snip(text, sub):
- return len(re.findall(r'(?={})'.format(sub), text))
- def count_snee(text, sub, start=0):
- count = 0
- while True:
- ix = text.find(sub, start)
- if ix < 0: break
- start = ix + 1
- count += 1
- return count
- text = "this person assesses your performance"
- sub = "sses"
- # returned value is in fractional seconds
- start = time.perf_counter()
- result1 = count_tony(text, sub)
- end = time.perf_counter()
- elapsed = end - start
- print("count_tony('{}', '{}') = {}".format(text, sub, result1))
- print("elapsed time = {:0.6f} micro_seconds".format(elapsed*1000000))
- start2 = time.perf_counter()
- result2 = count_snee(text, sub)
- end2 = time.perf_counter()
- elapsed2 = end2 - start2
- print("count_snee('{}', '{}') = {}".format(text, sub, result2))
- print("elapsed time = {:0.6f} micro_seconds".format(elapsed2*1000000))
- start3 = time.perf_counter()
- result3 = count_snip(text, sub)
- end3 = time.perf_counter()
- elapsed3 = end3 - start3
- print("count_snip('{}', '{}') = {}".format(text, sub, result3))
- print("elapsed time = {:0.6f} micro_seconds".format(elapsed3*1000000))
- ''' result (Python 3.4.1 64bit)-->
- count_tony('this person assesses your performance', 'sses') = 2
- elapsed time = 38.228700 micro_seconds
- count_snee('this person assesses your performance', 'sses') = 2
- elapsed time = 5.119915 micro_seconds
- count_snip('this person assesses your performance', 'sses') = 2
- elapsed time = 130.387175 micro_seconds
- '''
Advertisement
Add Comment
Please, Sign In to add comment