【问题标题】:python split() vs rsplit() performance?python split() vs rsplit() 性能?
【发布时间】:2014-02-01 21:58:36
【问题描述】:

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

例如

a = "abcdefghijklmnopqrstuvwxyz,1".

a.split(",", 1) 在性能方面会比a.rsplit(",",1) 更好吗?

【问题讨论】:

  • 看起来像是过早的优化。这不会扼杀你的表现。选择你的战斗。
  • @rikAtee 当所有答案都具有同等可读性时,这并不是过早的优化。这是学习类似方法的性能,因此如果您必须执行此类操作,您将知道许多类似选项中的哪一个是最好的。

标签: python string split


【解决方案1】:

我认为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() 用于在最后一次出现时拆分字符串。

【讨论】:

  • 虽然这是真的 - 问题是关于 splitrsplit 的性能(可能特别是在只有一个分隔符的字符串上) - 而不是它们在使用方面有何不同。
【解决方案2】:

我参加这个聚会超级迟到了,但对于其他偶然发现这一点的人来说,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】:

    除了之前的答案,使用 split 与 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 比 split 快,而对于前面答案中的示例,split 更快。

    【讨论】:

      【解决方案4】:

      为了补充@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
      

      所以,确实,这是一个无关紧要的区别。

      【讨论】:

        【解决方案5】:

        下面是使用timeit.timeit的时间测试来比较两种方法的速度:

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

        如您所见,它们差不多。 str.split 快​​了几分之一秒,但这并不重要。所以,你可以选择任何你想要的方法。

        附:虽然,str.split 方法少一个字符来输入。 :)

        【讨论】:

          猜你喜欢
          • 2022-12-14
          • 1970-01-01
          • 1970-01-01
          • 2011-07-09
          • 2015-01-09
          • 2022-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多