Also ich bin ziemlich neu in python, und verwende python in Verbindung mit sagemath. Nun hab ich folgendes Problem. Ich hab eine Liste, das ein Output einer Funktion ist. Sprich: Es ist wiefolgt aufgebaut = [1,0,0,1,0,0]. Nun möchte ich gerne die Periodenlänge der Liste herausfinden, in dem Fall wäre das ja 3, weil e sich nach 3 Stellen wiederholt.
Ich dachte mir, das ich die Liste einfach kopiere, sodass ich sie 2 mal habe, und dann in einer for-schleife die Werte um eins nach links durchschiebe(der Wert der links "rausfällt" wird rechts wieder in die Liste gesteckt), und dieses solange wiederhole bis die Listen wieder gleich sind. Also ein Beispiel:
Liste1 = [1,0,0,1,0,0]
Liste2 = [1,0,0,1,0,0]
1. Left-Shift:
Liste1 = [1,0,0,1,0,0]
Liste2 = [0,0,1,0,0,1] -> nicht gleich
2.Left-Shift:
Liste1 = [1,0,0,1,0,0]
Liste2 = [0,1,0,0,1,0] -> nicht gleich
3. Left-Shift:
Liste1 = [1,0,0,1,0,0]
Liste2 = [1,0,0,1,0,0] -> gleich -> Periodenlänge = 3.
So nun hab ich folgendes Problem: Jedes mal wenn ich den left-shift mittels einer selbstgeschriebenen Funktion durchführe, werden beide Listen nach links geschoben, und nicht nur die eine! Ich weiß wirklich nicht woran es liegt. Ich hab den relevanten Code mal unten dran gehangen. Ich weiß das ist vielleicht nicht sehr gut programmiert und geht sicherlich auch noch effizienter(Tipps? )
Code: Alles auswählen
def lshift(array):
temp = 0
temp = array[0]
for i in range (1,len(array)):
array[i-1] = array[i]
array[(len(array)-1)] = temp
return array
output2 = output
for i in range(len(output)):
output = lshift(output)
if (output == output2):
print i
break