2016-04-03 9 views
2

pythonistas: что быстрее, где a что-то вроде [ str(x) for x in list(range(100)) ]?python: map() или понимание списка?

ints = map(int, a)

Или

ints = [ int(x) for x in a ]

Предполагая a будет относительно большой список строк ...

+2

карта будет быстрее, после того, что это личные предпочтения , карта происходит на уровне c, как только вы используете карту без лямбды с некоторым встроенным методом, она будет, как правило, быстрее, чем делать то же самое в списке comp –

+2

. CPython не имеет большинства эффектов, которые делают тесты трудными для таких языков, как C или Java, поэтому вы могли бы просто [время] (https://docs.python.org/2/library/timeit.html) и, вероятно, получить правильный ответ. – user2357112

+0

читайте это: http: //stackoverflow.com/a/1247490/4941927 Я думаю, что каждый из них может быть полезен в соответствии с вашими потребностями. – Milor123

ответ

5

map выглядит быстрее (без лямбда) на моем ноутбуке (Macbook Pro Mid 2014, OSX 10.11.4, 16 ГБ DDR3, 2,2 ГГц Intel Core i7):

Испытано с Python 2.7.10

>>> timeit.timeit("[int(x) for x in range(100)]", number=100000) 
1.6301331520080566 

>>> timeit.timeit("map(int, range(100))", number=100000) 
0.9462239742279053 

Однако, используя карту с лямбда-функции является самым медленным:

>>> timeit.timeit("map(lambda x: int(x), range(100))", number=100000) 
2.285655994415283 
Смежные вопросы