【发布时间】:2014-12-29 11:53:07
【问题描述】:
假设我有一个具有重复模式的数字,即存在一串重复自身的数字以生成相关数字。例如,这样的数字可能是 1234123412341234,通过重复数字 1234 创建。
我想做的是找到重复自身以创建数字的模式。因此,给定1234123412341234,我想计算1234(也许4,表示1234重复4次以创建1234123412341234)
我知道我可以这样做:
def findPattern(num):
num = str(num)
for i in range(len(num)):
patt = num[:i]
if (len(num)/len(patt))%1:
continue
if pat*(len(num)//len(patt)):
return patt, len(num)//len(patt)
但是,这似乎有点太老套了。我想我可以使用itertools.cycle 来比较两个周期的相等性,但这并没有真正成功:
In [25]: c1 = itertools.cycle(list(range(4)))
In [26]: c2 = itertools.cycle(list(range(4)))
In [27]: c1==c2
Out[27]: False
有没有更好的方法来计算这个? (我对正则表达式持开放态度,但我不知道如何在那里应用它,这就是为什么我没有将它包含在我的尝试中)
编辑:
- 我不一定知道这个数字有重复的模式,所以如果没有,我必须返回
None。 - 现在,我只关心检测完全由重复模式组成的数字/字符串。但是,稍后,我可能还会有兴趣寻找以几个字符开头的模式:
magic_function(78961234123412341234)
将返回 1234 作为模式,4 作为重复次数,4 作为模式首次出现的输入中的第一个索引
【问题讨论】:
-
771177117711这样的东西怎么样?这非常困难。 -
@AlexThornton:这是
7711的模式,3 次,或者1177的模式,2 次(带有前导和尾随噪声) -
正则表达式失败了,烦人。我看看我能不能想到什么。
-
@AlexThornton regex101.com/r/hO3xY3/3 它不会失败
-
@vks 抱歉,我没有看到您的编辑。
标签: python regex python-3.x pattern-recognition