2014-01-13 2 views
7

У меня есть строка в python. Я хочу разбить его на maxsplit = 1 на разделителе, который близок к концу строки.python split() vs rsplit() производительность?

См., Например,

a = "abcdefghijklmnopqrstuvwxyz,1". 

Будет a.split(",", 1) лучше с точки зрения производительности, чем a.rsplit(",",1)?

+5

Я бы сказал, протестируйте его :) –

+3

выглядит как преждевременная оптимизация. это не будет убивать вашу работу. выберите свои битвы. – rikAtee

+1

@ rikAtee Это не преждевременная оптимизация, когда все ответы одинаково читаемы. Это изучение производительности аналогичных методов, поэтому, если вам нужно выполнить такие операции, вы узнаете, какой из многих подобных вариантов лучше всего. – mVChr

ответ

18

Ниже тест времени с помощью timeit.timeit для сравнения скоростей двух методов:

>>> from timeit import timeit 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".split(",", 1)') 
1.6438178595324267 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".rsplit(",", 1)') 
1.6466740884665505 
>>> 

Как вы можете видеть, что они примерно одинаковы. str.split - это несколько долей секунды быстрее, но это действительно неважно. Таким образом, вы можете выбрать любой метод, который вы хотите.

P.S. Хотя, str.split способ есть один нет знак для типа. :)

1

Просто в дополнение @iCodez ответа, вы можете запустить тест синхронизации из командной строки:

$ python -m timeit '"abcdefghijklmnopqrstuvwxyz,1".split(",", 1)' 
1000000 loops, best of 3: 0.321 usec per loop 
$ python -m timeit '"abcdefghijklmnopqrstuvwxyz,1".rsplit(",", 1)' 
1000000 loops, best of 3: 0.327 usec per loop 

Таким образом, на самом деле, это несоответствующая разница.

4

Добавляя к предыдущим ответам, использование split vs rsplit должно зависеть от того, где вы хотите искать. Пример:

$ python -m timeit '"abcdefghijklmnopqrstuvwxyz,sdfsgfkdjgherughieug,1".split(",")[2]' 
1000000 loops, best of 3: 0.48 usec per loop 
$ python -m timeit '"abcdefghijklmnopqrstuvwxyz,sdfsgfkdjgherughieug,1".rsplit(",",1)[1]' 
1000000 loops, best of 3: 0.453 usec per loop 

Здесь вы ищете 1, в этом случае, используя rsplit быстрее, чем раскол, в то время как для примеров в предыдущих ответах, раскол быстрее.

3

Я очень поздно к этой партии, но для кого-то наткнуться это, partition быстрее, чем split(x, 1):

>>> from timeit import timeit 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".split(",", 1)') 
0.23717808723449707 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".rsplit(",", 1)') 
0.20203804969787598 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".partition(",")') 
0.11137795448303223 
>>> timeit('"abcdefghijklmnopqrstuvwxyz,1".rpartition(",")') 
0.10027790069580078 

И вы можете угробить , легко, если вы хотите, h, _, t = s.rpartition(',') или такие.

0

Я думаю, что есть небольшая разница между split() и rsplit(): , например:

$ str1 = "w,e,l,c,o,m,e" 
print(str1.split(',',2) 

$str1 = "w,e,l,c,o,m,e" 
print(str1.rsplit(',',2) 

Вы видите, используется split(), если вы хотите разделить строки на первых появлений и rsplit() используется, если вы хотите разбить строки на последние вхождения.

+0

Хотя это правда - речь идет о производительности 'split' vs' rsplit' (возможно, конкретно в строке с единственным разделителем-ограничителем), а не в том, как они отличаются в терминах использования. –

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