Bitte beachten Sie, folgendes Problem: Ich habe eine bestimmte Permutation Sigma:Permutationen: Prüfungszyklus Notation
sigma = [4,1,6,2,3,5]
das gewünschte Ergebnis ist der Zyklus-Notation zu erzeugen, die folgt:
my_cycles_perm = [[4,2,1],[6,5,3]]
Mein Versuch geht Wie der Code unten scheint, scheint es, dass ich nur bis zum ersten Zyklus komme, aber nicht wieder in den zweiten eingreifen kann:
Die Idee hinter der my_row_cycle-Funktion ist eine bestimmte Permutation Sigma zu nehmen, eine Art Leistungsschalter namens Marker (Cricket geschlossen, wenn Marker == 0), und durchlaufen die Permutation, bis ich einen Zyklus zu vervollständigen, sobald der Zyklus abgeschlossen ist, speichern ich es in einer Liste.
Ich überprüfe dann, ob es noch andere Zyklen gibt, aus der Permutation zu extrahieren, indem ich wieder über Sigma iteriere, bis ich eine Zahl in Sigma finde, die nicht in den vorher extrahierten Zyklen ist. Wenn eine solche Nummer gefunden wird, starte ich den Prozess neu. Wenn nicht, stoße ich meinen Schutzschalter ab, markiere == 1, um den gesamten Prozess zu beenden und gebe meine Zyklusnotation der Sigma-Permutation aus.
aber das scheint immer noch Utopie für mich zu sein. :)
def my_row_cycle(sigma):
aux_sigma = list(sigma)
init_ref = aux_sigma.index(aux_sigma[0]) +1 #First antecedent of aux_sigma
init_image = aux_sigma[init_ref-1] #Image of the antecedent
jumper_image = init_image
row_cycle = []
row_cycle.append(init_image)
my_cycles_perm = []
marker = 0
while marker == 0: #Circuit breaker
while jumper_image != init_ref: #establishes if cycle complete
for x in aux_sigma: #iterates sigma while cycle incomplete
jumper_ref = aux_sigma.index(x) + 1
if jumper_ref == jumper_image: #Condition to append to cycle
row_cycle.append(x)
jumper_image = x #Changing the while loop condition
my_cycles_perm.append(row_cycle)
for a in aux_sigma:
for a in my_cycles_perm:
cycle = a
for a in cycle: #looking for match in aux_sigma and cycle
if a not in cycle:
row_cycle = []
init_image = a
init_ref = aux_sigma.index(init_image) + 1
marker = 0
break
else:
marker = 1
return init_ref, init_image, jumper_image, jumper_ref, row_cycle, marker, my_cycles_perm
nach Auswertung:
(1, 4, 1, 6, [4, 2, 1], 1, [[4, 2, 1]])
kann ich nicht scheinen zu verstehen, warum meine Marker Reisen auf den Wert „1“, und doch meinen Zyklus Notation unvollständig sind. Ich danke Ihnen im Voraus, wenn Sie irgendwelche Vorschläge und oder Korrekturen haben.
Wenn Sie Menschen, die Sie Ihren Code debuggen helfen, sollten Sie vielleicht versuchen, so schön wie möglich zu ihnen zu sein, indem Sie Ihren Code zu kommentieren und zu erklären, die Logik, die Sie versuchen zu folgen. – Julien
Du hast Recht, ich war den ganzen Tag schon dabei und habe meine Frage um 2 Uhr morgens gestellt, während ich müde und frustriert war (ich weiß ...). Ich war erst seit ein paar Tagen am Programmieren und wusste nicht, wie nützlich es ist, meinen Code zu kommentieren. Trotzdem habe ich etwas von dir gelernt, danke! Wie auch immer, post-editiert und Notizen für zukünftige Fragen. – Yann1123