2016-04-03 12 views
0

Okay, ich bin wirklich neu in Python und habe keine Ahnung, wie dies zu tun:Swapping Paare von Zeichen in einem String

Ich brauche eine Zeichenfolge zu nehmen, sagen ‚ABAB__AB‘, wandelt es in eine Liste, und nimm dann den führenden Index des Paares, das ich bewegen möchte, und tausche dieses Paar mit dem __. Ich denke, die Ausgabe wie folgt aussehen sollte:

move_chars('ABAB__AB', 0) '__ABABAB'

und ein weiteres Beispiel:

move_chars('__ABABAB', 3) 'BAA__BAB'

Ehrlich gesagt keine Ahnung, wie es zu tun.

+0

Haben Sie irgendwelche vorbereitenden Versuche mit unerwünschten Ergebnissen? – TigerhawkT3

+0

Ich hatte ein paar Versuche. Aber ich habe wirklich keine Ahnung, wo ich überhaupt anfangen soll. Ich habe versucht: def move_chars (Zustand, pos): s = Liste (Zustand) Wirklich habe ich nur keine Ahnung, was ich tue. –

Antwort

0

Python-Strings sind unveränderlich, so dass Sie eine Zeichenfolge nicht wirklich ändern können. Stattdessen erstellen Sie eine neue Zeichenfolge.

Wenn Sie einzelne Zeichen in einer Zeichenfolge ändern möchten, können Sie sie in eine Liste von Zeichen konvertieren, daran arbeiten und dann die Liste wieder in eine Zeichenfolge einfügen.

chars = list(str) 
# work on the list of characters 
# for example swap first two 
chars[0], chars[1] = chars[1], chars[0] 
return ''.join(chars) 
+0

Verwenden Sie also Befehle wie .pop() und .append(), um Zeichen nach rechts zu verschieben? Aber wie mache ich Paare umher? Nehmen Sie die Zeichen in Position 0 und 1, und tauschen Sie sie dann mit denen in 3 und 4? –

+0

@TownofRavens Vielleicht möchten Sie Ihre Datenstruktur überdenken. Wenn Sie sich um Buchstabenpaare bewegen, besonders mehrmals, dann sollten Sie vielleicht einfach bei einer Liste bleiben. –

+0

@TownofRavens Wenn Sie nur ein paar Tauschen möchten, sollten Sie Indizes verwenden: 'chars [0], chars [3] = Zeichen [3], Zeichen [0]; Zeichen [1], Zeichen [4] = Zeichen [4], Zeichen [1] '. – szym

0

ich denke, das in den Kommentarabschnitt gehen sollte, aber ich kann wegen des Mangels an guten Ruf nicht äußern, so ...

Sie wahrscheinlich mit Listenindex Swapping hafte wollen, eher als mit .pop() und .append(). .pop()kann Elemente aus beliebigem Index entfernen, aber nur eins auf einmal, und .append() kann nur am Ende der Liste hinzufügen. Sie sind also ziemlich begrenzt und würden Ihren Code bei diesen Problemen komplizieren.

Also, gut, bleiben Sie besser beim Tauschen mit Index.

0

Der Trick besteht darin, mit List Slicing Teile der Zeichenfolge zu verschieben.

def move_chars(s, index): 
    to_index = s.find('__')    # index of destination underscores 
    chars = list(s)      # make mutable list 
    to_move = chars[index:index+2]   # grab chars to move 
    chars[index:index+2] = '__'   # replace with underscores 
    chars[to_index:to_index+2] = to_move # replace underscores with chars 
    return ''.join(chars)     # stitch it all back together 

print(move_chars('ABAB__AB', 0)) 
print(move_chars('__ABABAB', 3)) 
+0

Vielen Dank! Ich verstehe es jetzt. –