Last active
December 2, 2018 09:48
-
-
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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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