我在python中有一个字符串。我想在分隔符上用maxsplit = 1
拆分它,它非常靠近字符串的末尾。
例如
a = "abcdefghijklmnopqrstuvwxyz,1".
a.split(",", 1)
在性能方面会优于a.rsplit(",",1)
吗?
答案 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)
我在这个派对上已经很晚了,但是对于其他任何一个绊倒的人来说,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(',')
。
答案 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
所以,确实,这是一个无关紧要的差异。