python split()vs rsplit()性能?

时间:2014-01-13 23:29:45

标签: python string split

我在python中有一个字符串。我想在分隔符上用maxsplit = 1拆分它,它非常靠近字符串的末尾。

例如

a = "abcdefghijklmnopqrstuvwxyz,1".

a.split(",", 1)在性能方面会优于a.rsplit(",",1)吗?

5 个答案:

答案 0 :(得分:19)

以下是使用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 :(得分: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比分裂更快,而对于前面答案中的例子,分割更快。

答案 2 :(得分:4)

我在这个派对上已经很晚了,但是对于其他任何一个绊倒的人来说,partitionsplit(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(',')

答案 3 :(得分:3)

我认为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()

答案 4 :(得分: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

所以,确实,这是一个无关紧要的差异。