Skip to content

Instantly share code, notes, and snippets.

@seanwu1105
Last active December 2, 2018 09:48
Show Gist options
  • Save seanwu1105/6c348e8e3c02d3a07fe583e15cffe96a to your computer and use it in GitHub Desktop.
Save seanwu1105/6c348e8e3c02d3a07fe583e15cffe96a to your computer and use it in GitHub Desktop.
Compare the performance about removing last element from iterables (string, tuple, list, deque, numpy.ndarray and bitarray).
import timeit
import collections
import itertools
import numpy as np
from bitarray import bitarray as b
def test_slice(data):
for i in reversed(range(len(data))):
data[:i]
def test_islice(data):
for i in reversed(range(len(data))):
list(itertools.islice(data, len(data) - 1))
def test_pop(data):
while len(data):
data.pop()
s = '1' * 50
t = (1,) * 50
l = [1] * 50
n = np.fromiter('1' * 50, dtype=np.int8)
bits = b('1' * 50)
print(
'string slice',
timeit.timeit('test_slice(s)', globals=globals()),
sep='\t'
)
print(
'tuple slice',
timeit.timeit('test_slice(t)', globals=globals()),
sep='\t'
)
print(
'list slice',
timeit.timeit('test_slice(l)', globals=globals()),
sep='\t'
)
print(
'np slice',
timeit.timeit('test_slice(n)',
globals=globals()), sep='\t'
)
print(
'bitarray slice',
timeit.timeit('test_slice(b(s))',
globals=globals()),
sep='\t'
)
print(
'string islice',
timeit.timeit('test_islice(s)', globals=globals()),
sep='\t'
)
print(
'tuple islice',
timeit.timeit('test_islice(t)', globals=globals()),
sep='\t'
)
print(
'list islice',
timeit.timeit('test_islice(l)', globals=globals()),
sep='\t'
)
print(
'deque islice',
timeit.timeit(
'test_islice(collections.deque(l))', globals=globals()),
sep='\t'
)
print(
'np islice',
timeit.timeit('test_islice(n)',
globals=globals()), sep='\t'
)
print(
'bitarray islice',
timeit.timeit('test_islice(b(s))',
globals=globals()),
sep='\t'
)
print(
'list pop',
timeit.timeit('test_pop(l)', globals=globals()),
sep='\t'
)
print(
'deque pop',
timeit.timeit('test_pop(collections.deque(l))', globals=globals()),
sep='\t'
)
print(
'bitarray pop',
timeit.timeit('test_pop(b(s))', globals=globals()),
sep='\t'
)
# Results:
# string slice 3.5368036389991175
# tuple slice 7.19707729899892
# list slice 7.4672492669997155
# np slice 7.595518482998159
# bitarray slice 17.724860723999882
# string islice 52.82672910999827
# tuple islice 39.4152163530016
# list islice 42.93859768499897
# deque islice 45.74156380600107
# np islice 109.97881467600018
# bitarray islice 57.85054062000199
# list pop 0.10694511700057774
# deque pop 0.2539431669974874
# bitarray pop 8.542347485999926
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment