Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import functools
- import random
- import sys
- import timeit
- if sys.version_info < (3, 0):
- range = xrange
- def revind(L, n):
- indices = [index for index, item in enumerate(L) if item==n]
- for index in reversed(indices):
- del L[index]
- def whiledel(L, n):
- i = 0
- while i < len(L):
- if L[i] == n:
- del L[i] # Do not increment i here, because L[i] will change
- else:
- i += 1
- def slide(L, n):
- # indices takes *worse-case* O(N) space, but typical-case much less
- indices = [i for i, x in enumerate(L) if x==n]
- indices_seen = 0
- num_indices = len(indices)
- for i in range(len(L)):
- if (indices_seen < num_indices and
- i + indices_seen == indices[indices_seen]):
- indices_seen += 1
- if i+indices_seen >= len(L):
- break
- L[i] = L[i+indices_seen]
- L[-indices_seen:] = []
- def genexpr(L, n):
- L[:] = (i for i in L if i != n)
- def listcomp(L, n):
- L[:] = [i for i in L if i != n]
- if sys.version_info < (3, 0):
- def filterer(L, n):
- L[:] = filter(lambda i: i != n, L)
- else:
- def filterer(L, n):
- L[:] = filter(n.__ne__, L)
- def remove(L, n):
- while True:
- try:
- L.remove(n)
- except ValueError:
- break
- def removein(L, n):
- while n in L:
- L.remove(n)
- maxnum = int(sys.argv[1]) if len(sys.argv) > 1 else 16
- listlen = int(sys.argv[2]) if len(sys.argv) > 2 else 1000000
- reps = int(sys.argv[3]) if len(sys.argv) > 3 else 3
- L0 = [random.randrange(maxnum) for _ in range(listlen)]
- for f in revind, whiledel, slide, genexpr, listcomp, filterer, remove, removein:
- L = L0[:]
- p = functools.partial(f, L, 0)
- print('{}: {} ({})'.format(f.__name__, timeit.timeit(p, number=reps), len(L)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement