Nehmen wir an, ich habe eine Nummer mit einem wiederkehrenden Muster, d. H. Es gibt eine Reihe von Ziffern, die sich wiederholen, um die betreffende Zahl zu bilden. Zum Beispiel könnte eine solche Nummer 1234123412341234
sein, die durch Wiederholen der Ziffern 1234
erzeugt wird.
Was ich tun möchte, ist das Muster zu finden, das sich wiederholt, um die Zahl zu erstellen. Daher gegeben 1234123412341234
, würde Ich mag 1234
zu berechnen (und vielleicht 4
, um anzuzeigen, dass 1234
4-mal wiederholt 1234123412341234
erstellen)Das wiederkehrende Muster finden
weiß ich, dass ich dies tun könnte:
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)
jedoch diese scheint ein wenig zu hacky. Ich dachte, ich itertools.cycle
nutzen könnte zwei Zyklen für die Gleichstellung zu vergleichen, die nicht wirklich pan out:
In [25]: c1 = itertools.cycle(list(range(4)))
In [26]: c2 = itertools.cycle(list(range(4)))
In [27]: c1==c2
Out[27]: False
Gibt es einen besseren Weg, dies zu berechnen? (Ich wäre offen für einen regex, aber ich habe keine Ahnung, wie es dort anzuwenden, weshalb ich es nicht in meinen Versuchen enthalten)
EDIT:
- I don Muss nicht wissen, dass die Nummer ein sich wiederholendes Muster hat, also muss ich
None
zurückgeben, wenn es keins gibt. - Im Moment geht es mir nur darum, Nummern/Strings zu erkennen, die komplett aus einem sich wiederholenden Muster bestehen. Doch später, werde ich wahrscheinlich auch daran interessiert sein Muster zu finden, die nach ein paar Zeichen beginnen:
magic_function (78961234123412341234)
1234
als Muster zurückkommen würde, 4
als die Anzahl, wie oft sie wiederholt und 4
als der erste Index in dem Eingang, wo das Muster selbst erste
Was ist mit etwas wie '771177117711'? Das ist sehr schwierig. –
@AlexThornton: Das ist ein Muster von '7711', 3-mal, oder ein Muster von' 1177', zweimal (mit Vor- und Nachlaufgeräuschen) – inspectorG4dget
Der reguläre Ausdruck scheitert daran, ärgerlich. Ich werde sehen, ob ich an etwas denken kann. –