Escriba un programa en python que acepte una lista de palabras separadas por guiones e imprima de vuelta las mismas palabras, sin repetición y nuevamente separadas por guiones,después de ordenarlas alfabéticamente.
Ejemplo de entrada: naranja-avión-melodía-tupla-avión
Salida esperada: avión-melodía-naranja-tupla
Primero se adquieren las palabras
disordered_words = input('Escriba una lista de palabras separadas or guíones: ') # input() convierte todo input a string
Escriba una lista de palabras separadas or guíones: ola-hola-ala
disordered_words
'ola-hola-ala'
La estrategia es crear una lista de palabras a partir del string. La cual que se puede organizar fácilmente con métodos de las listas para luego devolver como un solo string.
Para crear la lista de palabras se irán añadiendo los caracteres del string en una variable hasta encontrar un guión, en cuyo caso se agrega el contenido de la variable a una lista y se resetea la variable donde se guardan los caracteres para almacenar la siguiente palabra.
mywords = [] # en esta lista se almacenarán las palabras
word = '' # string vacío para almacenar los caracteres de cada palabra
for char in disordered_words: # iterando sobre los caracteres del string
if char != '-': # si el caracter no es - se añade a la palabra
word += char
else: # si el caracter es -, se añade la palabra a la lista y vacía la palabra
mywords.append(word)
word = ''
mywords.append(word) # añadiendo la última palabra
mywords
['ola', 'hola', 'ala']
Usando los conjuntos se eliminan duplicados y luego se organiza usando sorted()
sorted(list(set(mywords))) #se orgniza alfabéticamente y eliminan repeticiones
['ala', 'hola', 'ola']
mywords
['ola', 'hola', 'ala']
Finalmente se usa la función join() de python para unir en un string las palabras. La lista que se unió fue una en la cual todas las palabras finalizan con un guión excepto la última.
ordered_words = ''.join([word + '-' for word in mywords])[:-1]
ordered_words
'ola-hola-ala'
Organizando todo en una función
def word_orderer(disordered_words):
"""Sort alphabetically a string with a list of words separated by a hyphen eliminating repetitions."""
mywords = [] # en esta lista se almacenarán las palabras
word = '' # string vacío para almacenar los caracteres de cada palabra
for char in disordered_words: # iterando sobre los caracteres del string
if char != '-': # si el caracter no es - se añade a la palabra
word += char
else: # si el caracter es -, se añade la palabra a la lista y vacía la palabra
mywords.append(word)
word = ''
mywords.append(word) # añadiendo la última palabra
mywords = sorted(list(set(mywords))) # se organiza alfabéticamente y eliminan repeticiones
return ''.join([word + '-' for word in mywords])[:-1]
word_orderer('naranja-avión-melodía-tupla-avión')
'avión-melodía-naranja-tupla'