优化:Python String Repetition

时间:2010-06-20 01:35:24

标签: python string repeat

我有一段代码,它会接受一个字符串并重复它,使字符串的长度为x。

>>> import math
>>> def repeat(data, length):
        return (data * int(math.ceil(float(length) / len(data))))[:length]
>>> repeat("Hello World", 22)
'Hello WorldHello World'
>>> repeat("Hello World", 20)
'Hello WorldHello Wor'

有没有办法优化它? 我需要这个操作很快,因为它会被大量使用。 请注意,这也需要使用列表。

4 个答案:

答案 0 :(得分:3)

这可能会略微加快:

def repeat(string, length):
  L = len(string)
  return string * (length // L) + string[:length % L]

我说“可能”,因为LOT取决于典型的stringlength!使用'Hello World'61,我已将此时间(在旧的Mac笔记本电脑上)定时为1微秒,相比之下为1.66微秒; 'Hello World'*10061*123,2.08微秒vs 2.68。只需 如何快速,您需要什么长度的字符串以及length的典型值?

注意//是“除以截断”(只是为了确保它在Python 3以及Python 2中起作用;-)即使Stack Overflow将事物着色就好像它是注释标记一样(如在C ++中) )。

答案 1 :(得分:0)

这里没有必要做浮点数;在旧的Python版本中,只需说“int(length)/ len(string)”,在新版本中,您可以使用“//”运算符。当你得到结果时,你可以加1来确保它足够长。或者,以更多的添加为代价,您可以更精确,并且永远不会使初始字符串太长:

...
    return (data * ((int(length) + len(data) - 1) / len(data)))[:length]

答案 2 :(得分:0)

而不是int(math.ceil(float(length) / len(data))),您可以使用length/len(data) + 1。这不完全相同,但也应该有效。

在尝试加快速度之前,您确定此功能是性能瓶颈吗?你会每秒呼叫它几千次?

要找出函数的哪个变体是最快的,你应该对它进行分析,timeit模块通常在那里很有用。

答案 3 :(得分:0)

如果你真的想要优化你需要在C中重写你的函数作为python的扩展。

您可以找到信息here。 对不起我的英语,我是新来的。