Wie verschiebt man einen String in Python nach rechts?

7

Ich habe versucht, eine Zeichenfolge nach rechts zu verschieben

  • Der letzte Wert sollte der erste sein und der Rest folgt
  • s= "I Me You" sollte "You I Me" zurückgeben

Ich habe den folgenden Code ausprobiert, aber es funktioniert nicht Bitte helfen Sie mir ..

%Vor%     
Zeeran 30.04.2015, 21:15
quelle

10 Antworten

6

Zuerst teilen wir die Zeichenfolge:

%Vor%

Dann fügen wir l[-1:] hinzu, das ist die Liste vom letzten Element bis zum Ende, mit l[:-1] , das ist die Liste vom Anfang bis (aber nicht enthalten) das letzte Element:

%Vor%

Endlich kommen wir hinzu:

%Vor%     
JuniorCompressor 30.04.2015 21:21
quelle
3

Und jetzt ...

Wettbewerbszeit

Was vielleicht interessanter ist, ist was ist der schnellere Ansatz? .

Zuerst testen Sie mit der OP-Testzeichenkette (nur 3 Chunks) und den zweiten Test mit einer Kette von 600 Char-Chunks.

%Vor%

Das gibt folgende Ergebnisse:

%Vor%

Und der Gewinner ist .....

%Vor%

Das hat mich überrascht (ich wette auf find_and_slice und ich habe verloren). Es gibt 2 Antwortklassen:

  1. brute force: spalte alle Zeichenfolgen
  2. achte darauf, dass wir nur den letzten Teil der Zeichenfolge
  3. brauchen

Selbst im einfachsten Fall I Me You ist der erste Ansatz 2 bis 3 mal langsamer als der beste. Wenn die Saite interessanter wird, wird der erste Ansatz offensichtlich sehr ineffizient.

Das wirklich lustige ist, dass die am meisten gewählte Antwort die langsamere ist :)

    
Michele d'Amico 01.05.2015 21:07
quelle
2

Sie können Indizes und Slices verwenden, um eine neue Liste zu erstellen, die Sie dann mit Leerzeichen verbinden:

%Vor%     
Malik Brahimi 30.04.2015 21:21
quelle
2

Wenn Sie die Zeichenfolge zu collections.deque machen, können Sie die rotate() Methode:

%Vor%     
pzp 30.04.2015 21:27
quelle
2

Sie können das tun, ohne Listen zu verwenden, wenn alle Trennzeichen gleich sind ( split ohne Parameter akzeptiert alle Leerzeichen). Verwenden Sie String-Methoden wie rindex oder rpartition :

%Vor%     
myaut 30.04.2015 21:29
quelle
2

Schnellere Lösung mit str.rfind , String-Slice und String-Verkettung:

%Vor%

Eine weitere schnelle Lösung mit str.rsplit :

%Vor%

In Funktionsformularen:

%Vor%     
Shashank 30.04.2015 21:24
quelle
1

Dieser Code wird für Sie funktionieren

%Vor%

Beispiel:

shift_str("xxx ccc lklklk") & gt; & gt; 'ccc lklklk xxx'

    
Vladimir 30.04.2015 21:20
quelle
1
%Vor%     
benjamin 30.04.2015 21:22
quelle
0
%Vor%     
TigerhawkT3 30.04.2015 21:24
quelle
0

Meine zwei Cent:

%Vor%

Ausgabe

%Vor%     
letsc 30.04.2015 21:32
quelle

Tags und Links