Heim  >  Artikel  >  Backend-Entwicklung  >  Sprechen Sie kurz über das Problem der Umkehrung von Zeichenfolgen in Python

Sprechen Sie kurz über das Problem der Umkehrung von Zeichenfolgen in Python

WBOY
WBOYOriginal
2016-12-05 13:27:131061Durchsuche

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;

Die Methode ist wie folgt


Vergleich von 5 Methoden:


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:

Ausgabe:
# -*- 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 
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn