In [4]: some_list = 'setanéstebnsetanustebnésatenastubnestpnesanuastnbtsnastbnstanstbnsteanutsenbstanstbnstaà' * 1000
In [7]: %%timeit
...:
...: list_a = []
...: list_b = []
...:
...: for s in some_list:
...: if s[0] == 'a':
...: list_a.append(s)
...: elif s[0] == 'b':
...: list_b.append(s)
...:
...:
6.08 ms ± 142 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [8]: %%timeit
...:
...: list_a = [s for s in some_list if s.startswith('a')]
...: list_b = [s for s in some_list if s.startswith('b')]
...:
...:
11.8 ms ± 159 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [10]: def starts_with_a(s):
...: return s[0] == 'a'
...:
...: def starts_with_b(s):
...: return s[0] == 'b'
...:
In [11]: %%timeit
...:
...: list_a = list(filter(starts_with_a, some_list))
...: list_b = list(filter(starts_with_b, some_list))
...:
...:
10.4 ms ± 187 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [12]: %%timeit
...: generator_a = (s for s in some_list if s.startswith('a'))
...: generator_b = (s for s in some_list if s.startswith('b'))
...:
...:
401 ns ± 1.17 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [13]: %%timeit
...: generator_a = (s for s in some_list if s.startswith('a'))
...: generator_b = (s for s in some_list if s.startswith('b'))
...:
...: len(list(generator_a))
...: len(list(generator_b))
...:
...:
12 ms ± 113 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [14]: len(some_list)
Out[14]: 88000
Sur une telle liste, moyennement grosse, les générateurs ont l'air d'aller légèrement plus vite. C'était un test rapide et sûrement pourrave.
[^] # Re: Python
Posté par Glandos . En réponse au journal Découvrir Docker, Python, LLVM et Emscripten. Évalué à 4.
Allez, on dégaine un iPython, c'est parti.
Sur une telle liste, moyennement grosse, les générateurs ont l'air d'aller légèrement plus vite. C'était un test rapide et sûrement pourrave.