2017-08-28 5 views
4

Zurück in Python nach einer zweijährigen Pause. Erinnere dich nicht an den besten Weg, eine Zeichenkette von Anfang an zu durchlaufen und bei einem bestimmten Zeichen anzuhalten, um dann die Zeichenkette zurückzugeben.Durchlaufen einer Zeichenfolge und Zurückgeben einer neuen Zeichenfolge, die bei einem bestimmten Zeichen anhält

Ich weiß, ich muss eine neue Zeichenfolge erstellen, dann eine Schleife starten, um die vorhandene Zeichenfolge durchlaufen. Aber dann bleibe ich stecken. Ich weiß, dass ich die neue Zeichenfolge zurückgeben muss, bin mir aber nicht sicher, wie der Rest meines Codes aussehen soll. Vielen Dank im Voraus für Ihre Hilfe.

+0

ist das _certain character_ in der Zeichenfolge garantiert? Möchten Sie das bestimmte Zeichen in die neue Zeichenfolge einschließen oder kurz davor anhalten? –

Antwort

1

Wenn Sie nur die Teil von Anfang an der langen Kette bis zu einem bestimmten Zeichen erhalten möchten, können Sie einfach wie folgt vor:

>>> ch = 'r' 
>>> s = 'Hello, world!' 
>>> print(s[:s.find(ch)]) 
# Hello, wo 
+1

Dies funktioniert nicht für den Fall, dass ch nicht in s ist: 'c, s = 'r', 'Wer hat wodgew wabit?'; s [: s.find (c)] 'gibt:' 'Wer fwamed wodgew wabit'' (notieren Sie das fehlende Fragezeichen) ... – agtoever

1

Verwenden Sie ein String-Slice, um den Teil der gewünschten Zeichenfolge zu erfassen. Aus Ihrer Beschreibung klingt es so, als wollten Sie alle Zeichen bis zum ersten Vorkommen dieses Zeichens korrigieren?

Versuchen Sie dies zum Beispiel. Verändern Sie die Indizes, um den gewünschten Teil der Zeichenfolge zu erhalten.

long_string[0:i]

Die Antworten, die die Verwendung von .index() nicht gut funktionieren, wenn die Zielzeichen ohne fangen die Ausnahme in der Zeichenfolge nicht vorhanden sind.

1
try: 
    print d[:d.index('y')] 
except ValueError: 
    print d 
+0

Sie wollen wahrscheinlich die gesamte Zeichenfolge in diesem Fall zurückgeben. Und das Schreiben von 'außer ValueError' wäre ein kleines bisschen besser –

+0

Danke, bearbeitet es. – akp

0

Wenn das Stoppzeichen auf jeden Fall in der Kette ist Sie können .index() verwenden, die den Index des ersten Auftretens der Sache in Klammern finden und []

string = "hello op" 
stopchar = " " 

newstr = string[:string.index(stopchar)] 

#newstr = "hello" 

Schneiden wenn Sie nicht sicher, ob der Anschlag ch sind aracter ist im String sollten Sie .find() verwenden, die einen Fehler nicht erheben, wenn sie nicht den Charakter findet:

newstr = string[:string.find(stopchar)] 

Wenn Sie nicht beim ersten Zeichen beenden möchten und alle Worte, bevor die lernen wollen Stopp-Zeichen können Sie diese Liste Verständnis verwenden:

string2 = "hello op today" 
strings = [string2[:i] for i,c in enumerate(string2) 
      if c == stopchar] 
print (strings) 

Ergebnis:

['hello', 'hello op'] 
0

Sie eine Liste erstellen, könnte jedes Zeichen im String und Schleife enthält thro ugh die Liste.

mystr = raw_input("Input: ") 
newStr = list(mystr) 

print(newStr) 

Dann können Sie einfach Schleife durch die Liste

+0

Sie können nur nach Strings in Python suchen, es ist nicht notwendig, sie zuerst in eine Liste zu konvertieren. –

0
Ihre Bedingungen erfüllen

Ich denke split funktioniert besser als index (gibt Fehler, wenn Zeichen nicht gefunden) oder find (-1, wenn Zeichen nicht gefunden).

>>> s,c='Who fwamed wodgew wabit?','w' 
>>> s.split(c)[0] 
'Who f' 
>>> c='r' 
>>> s.split(c)[0] 
'Who fwamed wodgew wabit?' 

Erläuterung: splitreturns a list of the words in the string, using sep as the delimiter string. Durch das Zurückgeben des ersten Elements funktioniert dies genau wie angegeben.

Verwandte Themen