【问题标题】:Fastest way to reverse a string in python在python中反转字符串的最快方法
【发布时间】:2017-12-09 10:08:45
【问题描述】:

我能够想出两种不同的方法来在 Python 中反转字符串。

常识表明,代码行数越多,运行速度就越慢。

我做了以下几行代码:

代码1

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

代码2

st[::-1]

这些提供类似的性能。对于 20000 长的字符串,我什至看不到性能上的一毫秒差异。

我认为第一种方法应该是一种较慢的方法,因为它执行的操作要多 3 倍。

问题

为什么我没有看到性能差异?

【问题讨论】:

  • 这两个时间你是怎么计算的?对于包含 20,000 个字符的字符串,我得到了合理的结果:i.imgur.com/DhKaxhR.png
  • 在第一种情况下您没有使用:''.join(reversed(st)) 的任何原因?
  • 我在代码开头使用 time.now() 并在代码末尾使用 time.now() 进行基准测试。 @Cyb3rFly3r:这不是要提出一个有效的算法,而是要看看这两者中的哪一个会更快但是是的 ''.join(reversed(st)) 并没有引起我的注意

标签: python string string-matching


【解决方案1】:

我看到了不同。

首先,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

如您所见,对于这个特定的输入,切片在我的机器上要快约 8 倍。它也更简洁。

【讨论】:

  • 这更符合我的预期;在 Python 社区中众所周知,方法 2 在反转字符串方面比其他所有方法都快。
  • "".join 实在是太低效了……相对于只是倒车,这个做多个动作。
【解决方案2】:
s=input("enter string")
print(s[::-1])

【讨论】:

  • 这只是将问题中的一个选项添加到答案中,问题需要比较两个选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2019-03-14
  • 2011-01-04
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多