Element in Sequenz finden und rotieren
Verfasst: Donnerstag 27. September 2007, 05:58
Hallo,
ich bin mir nicht sicher ob es auch besser geht. Jedenfalls sieht meine Lösung ziemlich umständlich aus. Ziel ist es eine Sequenz (in meinem Fall: Tuple in Tuple) solange zu rotieren bis ein Wertepaar, dass mit einem bestimmten Wert beginnt, an erster Stelle steht. Das Tuple mit den Wertepaaren könnte folgendermaßen aussehen:
Im Falle, dass 982 die gesuchte Nummer ist, soll das Ergebnis so aussehen:
In der Praxis sind das mehrere Tausend Wertepaare. Keine Nummer wiederholt sich dabei. Meine bisherige Lösung dazu:
Meine Lösung funktioniert ja. Sieht aber unschön aus. Insbesondere Zeile 12. Darin wird das Wertepaar, dass mit start_node beginnt gesucht bzw dessen Index. Lässt sich diese Zeile auch irgendwie eleganter lösen?
Grüßle, Calo
ich bin mir nicht sicher ob es auch besser geht. Jedenfalls sieht meine Lösung ziemlich umständlich aus. Ziel ist es eine Sequenz (in meinem Fall: Tuple in Tuple) solange zu rotieren bis ein Wertepaar, dass mit einem bestimmten Wert beginnt, an erster Stelle steht. Das Tuple mit den Wertepaaren könnte folgendermaßen aussehen:
Code: Alles auswählen
nodepairs = ((23, 14),(12, 13),(982,27893),(1233,37),(1,8123))
Code: Alles auswählen
np = ((982,27893),(1233,37),(1,8123),(23, 14),(12, 13))
Code: Alles auswählen
import scipy
def rot(seq, n=1):
"""rotates and returns the sequence seq
"""
c = len(seq)
if c == 0: return seq
n = n % c
return seq[n:] + seq[:n]
start_node = 982
start_pos = scipy.array(nodepairs).transpose().tolist()[0].index(start_node) + 1
np = rot(nodepairs, start_pos)
Grüßle, Calo