Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def mins(items, n):
- mins = [float('inf')]*n
- for item in items:
- for i, min in enumerate(mins):
- if item < min:
- mins.insert(i, item)
- mins.pop()
- break
- return mins
- from random import randint, random
- import time
- test_data = [randint(10, 50) + random() for i in range(20000)]
- init = time.time()
- mins = mins(test_data, 8)
- print 'mins(items, n):', time.time() - init
- init = time.time()
- mins = sorted(test_data)[:8]
- print 'sorted(items)[:n]:', time.time() - init
- mins(items, n): 0.0632939338684
- sorted(items)[:n]: 0.0231449604034
- mins = items[:n]
- mins.sort()
- for i in items[n:]:
- if i < mins[-1]:
- mins.append(i)
- mins.sort()
- mins= mins[:n]
- mins(items, n): 0.297000169754
- sorted(items)[:n]: 0.109999895096
- mins2(items)[:n]: 0.0309998989105
- import heapq
- nlesser_items = heapq.nsmallest(n, items)
- from bisect import insort
- from itertools import islice
- def nsmallest_slott_bisect(n, iterable, insort=insort):
- it = iter(iterable)
- mins = sorted(islice(it, n))
- for el in it:
- if el <= mins[-1]: #NOTE: equal sign is to preserve duplicates
- insort(mins, el)
- mins.pop()
- return mins
- $ python -mtimeit -s "import marshal; from nsmallest import nsmallest$label as nsmallest; items = marshal.load(open('items.marshal','rb')); n = 10"
- "nsmallest(n, items)"
- nsmallest_slott_bisect
- import bisect
- def mins(items, n):
- mins = [float('inf')]*n
- for item in items:
- bisect.insort(mins, item)
- mins.pop()
- return mins
- mins(items, n): 0.0892250537872
- sorted(items)[:n]: 0.0990262031555
- import bisect
- import psyco
- psyco.full()
- def mins(items, n):
- mins = [float('inf')]*n
- for item in items:
- bisect.insort(mins, item)
- mins.pop()
- return mins
- mins(items, n): 0.0431621074677
- sorted(items)[:n]: 0.0859830379486
Add Comment
Please, Sign In to add comment