2016-04-30 4 views
0

Мне удалось создать два разных способа изменить строку на python. Поскольку общий уровень продиктован тем, что чем больше число строк кода, тем медленнее это происходит, поэтому я сделал следующие строки кода.Самый быстрый способ изменить строку в python

Code1

"".join(reversed(map(lambda x:x,st))) 

Кодекса2

st[::-1] 

Они, как правило, дают мне подобную работу, но я думаю, что первый один должен быть медленный подход, поскольку он выполняет более 3х операций. Но даже для длинной строки длиной 20000 я не вижу даже разницы в производительности в секунду, что на первый взгляд непонятно.

+0

Как вы это сделали? Я получаю разумные результаты для строки с 20 000 символов: https://i.imgur.com/DhKaxhR.png – Blender

+2

Любые причины, по которым вы не использовали: '. '.join (reverse (st))' в первом случае? – Cyb3rFly3r

+0

Я использовал time.now() в начале кода и time.now() в конце этого теста. @ Cyb3rFly3r: Это было не о том, чтобы придумать эффективный алгоритм, но чтобы увидеть, какой из этих двух будет быстрее. Но да '' '.join (reverseed (st)) 'не пробил мой разум –

ответ

5

Я вижу разницу.

Прежде всего, что случилось с map(lambda x: x, st)? В чем цель?

Используйте timeit модуль для тестирования кода:

$ python -m timeit '"".join(reversed("abcdefghijklmnopqrstuvwxyz"))' 
1000000 loops, best of 3: 0.586 usec per loop 
$ python -m timeit '"abcdefghijklmnopqrstuvwxyz"[::-1]'   
10000000 loops, best of 3: 0.0715 usec per loop 

Как вы можете видеть, слайс ~ 8x быстрее на моей машине для этого конкретного входа. Это также более красноречиво.

+0

Это больше в соответствии с моими ожиданиями; в сообществе Python известно, что метод 2 быстрее всех остальных для изменения строк. – Cyb3rFly3r

+0

"" .join действительно неэффективен ... против простого обращения, это делает несколько действий. –

Смежные вопросы