Wednesday 19 June 2019

Why python tuple factory function is slower than list factory function?

Although they're almost the same performance
But i'm curious because i thought that tuple is much efficient than tuple according to are-tuples-more-efficient-than-lists-in-python
Does anyone know?



>>> a = (i for i in range(100000))
>>> timeit.timeit('list(a)', 'from __main__ import a', number=1000)
0.011526490096002817
>>> a = (i for i in range(100000))

>>> timeit.timeit('tuple(a)', 'from __main__ import a', number=1000)
0.009374740999192



>>> a = [i for i in range(100000)]
>>> timeit.timeit('tuple(a)', 'from __main__ import a', number=1000)
0.35291082598268986
>>> timeit.timeit('list(a)', 'from __main__ import a', number=1000)
0.32638651994057



>>> a = {i for i in range(10000)}
>>> timeit.timeit('tuple(i for i in a)', 'from __main__ import a', number=1000)
0.4628257639706135
>>> timeit.timeit('[i for i in a]', 'from __main__ import a', number=1000)
0.20995741098886356
>>> timeit.timeit('list(map(lambda x: x, a))', 'from __main__ import a', number=1000)
0.9662498680409044


>>> timeit.timeit('x = (1,2,3,4,)', number=10000000)
0.13525238999864087
>>> timeit.timeit('x = [1,2,3,4,]', number=10000000)
0.5406758830067702


update



>>> timeit.timeit('tuple([i for i in a])', 'from __main__ import a', number=10000)
27.79521625099005

>>> timeit.timeit('list([i for i in a])', 'from __main__ import a', number=10000)
27.748358012002427
>>> timeit.timeit('x = (1,2,3,4,)', number=10000000)
0.13525238999864087
>>> timeit.timeit('x = [1,2,3,4,]', number=10000000)
0.5406758830067702
>>> timeit.timeit('list([i for i in (1,2,3,4,5)])', 'from __main__ import a', number=1000000)
0.48201177397277206
>>> timeit.timeit('tuple([i for i in (1,2,3,4,5)])', 'from __main__ import a', number=1000000)
0.4545572029892355



My intermediate conclusion: Assumed that you're building a json api service, maybe you should:




  1. use list comprehension not tuple comprehension because there's a function call when using tuple comprehension

  2. when casting generator into array, use list() over tuple()

  3. When declaring array, use (x, x, ) than [x, x, ]

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...