Problema: divida una cadena en una lista de palabras por un delimitador de caracteres pasados como una lista.número de división de cadena
Cadena: "After the flood ... all the colors came out."
salida deseada: ['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
he escrito la siguiente función - nota Soy consciente de que hay mejores maneras de dividir una cadena usando algunas de las pitones construidos en funciones, pero en aras de la aprendizaje pensé que iba a proceder de esta manera:
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', '', '', '', '', '', '', '', '', '']
no puedo entender por qué "salió" no se divide en "vino" y "fuera" como dos palabras separadas. Es como si el personaje de espacio en blanco entre las dos palabras estuviera siendo ignorado. Creo que el resto de la salida es basura que proviene del problema asociado con el problema "salió".
EDIT:
Seguí @ sugerencia de Ivc y se acercó con el siguiente código:
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']
Gracias a todos por las maravillosas soluciones. Me he ido con esto porque me obliga a aprender la lógica en lugar de usar funciones preconstruidas. Obviamente, si tuviera que escribir un código comercial, no volvería a inventar la rueda, pero con fines de aprendizaje iré con esta respuesta. Gracias por toda tu ayuda. – codingknob