Problem: Zerlegen einer Zeichenfolge in eine Liste von Wörtern durch Begrenzungszeichen, die als Liste übergeben werden.string split Ausgabe
String: "After the flood ... all the colors came out."
gewünschte Ausgabe: ['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
ich die folgende Funktion geschrieben haben - beachten Sie, ich weiß, dass es bessere Möglichkeiten gibt, eine Zeichenfolge mit einigen von Pythons eingebauten Funktionen zu spalten, sondern aus Gründen der Lernen ich dachte, ich auf diese Weise vorgehen würde:
def split_string(source,splitlist):
result = []
for e in source:
if e in splitlist:
end = source.find(e)
result.append(source[0:end])
tmp = source[end+1:]
for f in tmp:
if f not in splitlist:
start = tmp.find(f)
break
source = tmp[start:]
return result
out = split_string("After the flood ... all the colors came out.", " .")
print out
['After', 'the', 'flood', 'all', 'the', 'colors', 'came out', '', '', '', '', '', '', '', '', '']
ich kann nicht herausfinden, warum „herauskam“ aufgespalten wird nicht in „gekommen“ und „out“ als zwei getrennte Wörter. Es ist so, als ob der Leerraum zwischen den beiden Wörtern ignoriert wird. Ich denke, dass der Rest der Ausgabe Junk ist, der von dem Problem herrührt, das mit dem "herausgekommenen" Problem verbunden ist.
EDIT:
I @ IVc Vorschlag gefolgt und kam mit dem folgenden Code auf:
def split_string(source,splitlist):
result = []
lasti = -1
for i, e in enumerate(source):
if e in splitlist:
tmp = source[lasti+1:i]
if tmp not in splitlist:
result.append(tmp)
lasti = i
if e not in splitlist and i == len(source) - 1:
tmp = source[lasti+1:i+1]
result.append(tmp)
return result
out = split_string("This is a test-of the,string separation-code!"," ,!-")
print out
#>>> ['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code']
out = split_string("After the flood ... all the colors came out.", " .")
print out
#>>> ['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
out = split_string("First Name,Last Name,Street Address,City,State,Zip Code",",")
print out
#>>>['First Name', 'Last Name', 'Street Address', 'City', 'State', 'Zip Code']
out = split_string(" After the flood ... all the colors came out...............", " ."
print out
#>>>['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
Vielen Dank für die wunderbaren Lösungen. Ich bin damit gegangen, weil es mich zwingt, die Logik zu lernen, anstatt vorgefertigte Funktionen zu verwenden. Offensichtlich würde ich das Rad nicht neu erfinden, wenn ich kommerziellen Code schreiben würde, aber für Lernzwecke werde ich mit dieser Antwort gehen. Danke Ihnen allen für Ihre Hilfe. – codingknob