Das Vertauschen einer Zeichenfolge nach einem Wort ist eine sehr häufige Frage in Vorstellungsgesprächen. Es ist sehr einfach in Python zu implementieren.
def reverse_string_by_word(s): lst = s.split() # split by blank space by default return ' '.join(lst[::-1]) s = 'Power of Love' print reverse_string_by_word(s) # Love of Power s = 'Hello World!' print reverse_string_by_word(s) # World! Hello
Die obige Implementierung kann tatsächlich die meisten Situationen erfüllen, ist jedoch nicht perfekt. Beispielsweise wird das Ausrufezeichen in der zweiten Zeichenfolge nicht umgekehrt und die Anzahl der Leerzeichen in der ursprünglichen Zeichenfolge wird nicht beibehalten. (Im obigen Beispiel gibt es tatsächlich mehr als ein Leerzeichen zwischen Hello und World)
Das Ergebnis, das wir erwarten, sollte so aussehen.
print reverse_string_by_word(s) # Expected: !World Hello
Um die obige Lösung zu verbessern, ohne das Problem zu komplizieren, wird empfohlen, das Modul re zu verwenden. Sie können die offizielle Dokumentation von re.split() einsehen. Schauen wir uns konkrete Beispiele an.
>>> import re >>> s = 'Hello World!' >>> re.split(r'\s+', s) # will discard blank spaces ['Hello', 'World!'] >>> re.split(r'(\s+)', s) # will keep spaces as a group ['Hello', ' ', 'World!'] >>> s = '< Welcome to EF.COM! >' >>> re.split(r'\s+', s) # split by spaces ['<', 'Welcome', 'to', 'EF.COM!', '>'] >>> re.split(r'(\w+)', s) # exactly split by word ['< ', 'Welcome', ' ', 'to', ' ', 'EF', '.', 'COM', '! >'] >>> re.split(r'(\s+|\w+)', s) # split by space and word ['<', ' ', '', 'Welcome', '', ' ', '', 'to', '', ' ', '', 'EF', '.', 'COM', '!', ' ', '>'] >>> ''.join(re.split(r'(\s+|\w+)', s)[::-1]) '> !COM.EF to Welcome <' >>> ''.join(re.split(r'(\s+)', s)[::-1]) '> EF.COM! to Welcome <' >>> ''.join(re.split(r'(\w+)', s)[::-1]) '! >COM.EF to Welcome< '
Wenn Sie der Meinung sind, dass die Verwendung von Slices zum Umkehren der Reihenfolge nicht sehr lesbar ist, können Sie es tatsächlich so schreiben.
>>> ''.join(reversed(re.split(r'(\s+|\w+)', s))) '> !COM.EF to Welcome <'
Das geht in einem Satz, so einfach!
Python-Reverse-String, enthält insgesamt 5 Methoden, die erste ist die einfachste, dh die Schrittgröße beträgt -1, und die Zeichenfolge wird ausgegeben;
1. Die einfache Schrittgröße beträgt -1, was dem Umdrehen der Zeichenfolge entspricht (häufig verwendet);
2. Vertauschen Sie die Positionen des vorhergehenden und des folgenden Buchstabens;
3. Rekursive Methode, jeweils ein Zeichen ausgeben
4. Doppelendige Warteschlange, verwenden Sie die Funktion „extendleft()“;
5. Verwenden Sie eine for-Schleife, um von links nach rechts auszugeben
Code:
# -*- coding: utf-8 -*- #eclipse pydev, python 3.3 #by C.L.Wang #time: 2014. 4. 11 string = 'abcdef' def string_reverse1(string): return string[::-1] def string_reverse2(string): t = list(string) l = len(t) for i,j in zip(range(l-1, 0, -1), range(l//2)): t[i], t[j] = t[j], t[i] return "".join(t) def string_reverse3(string): if len(string) <= 1: return string return string_reverse3(string[1:]) + string[0] from collections import deque def string_reverse4(string): d = deque() d.extendleft(string) return ''.join(d) def string_reverse5(string): #return ''.join(string[len(string) - i] for i in range(1, len(string)+1)) return ''.join(string[i] for i in range(len(string)-1, -1, -1)) print(string_reverse1(string)) print(string_reverse2(string)) print(string_reverse3(string)) print(string_reverse4(string)) print(string_reverse5(string))
fedcba fedcba fedcba fedcba fedcba