2017-06-10 2 views
0

Ich versuche, die .split() - String-Methode zu replizieren. Es funktioniert gut, aber es enthält nicht das letzte Wort.Verwenden der Split-Funktion ohne Split() - String-Methode. Fast

def stringSplitter(string): 
    words = [] 
    current_word = "" 
    for x in range(len(string)): #problem is here 
     if string[x] == " ": 
      words.append(current_word) 
      current_word = "" 
     else: 
      current_word += string[x] 
    return words 

Test 1: Wenn Satz = Ich mag mein Fahrrad fahren, gibt meinem Code falsch:

['I', 'like', 'to', 'ride', 'my'] 

Das Ergebnis, das ich will, ist:

['I', 'like', 'to', 'ride', 'my', 'bicycle'] 
+0

Wenn Sie Indizierung in Ihrer Python for-Schleife verwenden, tun Sie normalerweise etwas falsch. – Rosh

Antwort

3

hinzufügen words.append(current_word) kurz vor der Rückkehr von der Funktion. Das ist dein "verlorenes" Wort. Außerdem müssen Sie weder range noch eine Indizierung verwenden. for x in string: iteriert direkt über die Zeichen.

+0

Danke! Endlich, das ist es, was ich vermisse. – lloydyu24

0

Ich habe es mit Hilfe der ersten Antwort von @DYZ bekommen. Vielen Dank! Anscheinend habe ich das letzte Wort übersprungen, weil ich vor der Rückkehr (unten) hinzufügen muss.

words.append(current_word) 

Mein Code:

def stringSplitter(string): 
    words = [] 
    current_word = "" 
    for char in string: 
     if char == " ": 
      words.append(current_word) 
      current_word = "" 
     else: 
      current_word += char 
    words.append(current_word)   
    return words 
1

Hinweis dies kurz und bündig eine Generatorfunktion implementiert werden könnte - wenn Sie nicht von der „realen“ str.split() Funktion Implementierung ein wenig abweichend etwas dagegen haben:

>>> def split(string, delimiter=' '): 
    current_word = '' 
    for char in string: 
     if char == delimiter: 
      yield current_word 
      current_word = '' 
     else: 
      current_word += char 
    yield current_word 


>>> list(split('I like to ride my bicycle')) 
['I', 'like', 'to', 'ride', 'my', 'bicycle'] 
>>> 

Sie könnten ändern sie sogar auch zurückkehr das Trennzeichen zu ermöglichen:

>>> def split(string, delimiter=' ', save_delimiter=False): 
    current_word = '' 
    for char in string: 
     if char == delimiter: 
      yield current_word 
      if save_delimiter: 
       yield char 
      current_word = '' 
     else: 
      current_word += char 
    yield current_word 


>>> list(split('I like to ride my bicycle', save_delimiter=True)) 
['I', ' ', 'like', ' ', 'to', ' ', 'ride', ' ', 'my', ' ', 'bicycle'] 
>>>