es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo comparar algunas letras con una lista completa de palabras para encontrar las palabras que contienen las letras buscadas en orden?

Estoy tratando de encontrar palabras que contengan letras específicas en orden.
Así que si busco “ers”, solo debería dar palabras como “ERStaunding”, etc.

Esto es lo que tengo hasta ahora: (no funciona porque una cadena requiere una cadena como operando izquierdo) pero ya te haces una idea:

ordenado = []

for i in range(0, len(palabras)): #”palabras” es una lista de 1600 palabras
if posible in palabras[i]: #error debido a lo que dije antes
ordenado.append(palabras[i]) #”posible” es una cadena de letras

print(ordenado)

¡Gracias de antemano!

edit:

Esto es lo que ingreso/lo que sale: (en seudocódigo, es el juego del ahorcado para la universidad)

entrada del usuario: “hello” – palabra a adivinar

la computadora adivina: “h” (por ejemplo)
“¿La h es parte de tu palabra? (s/n)”

entrada del usuario: “s”

La computadora sabe que “h” está en la posición 1 (comparando con la palabra que se debe adivinar) – estúpido, lo sé, pero este es un ejemplo 😀
h _ _ _ _

ahora la computadora debería comparar lo que tiene hasta ahora (h hasta este punto en el índice 0) con las palabras de una base de datos (en mi caso words.txt) y solo dejar las que tienen “h” como primera letra. Este proceso debería ser intercambiable. Por ejemplo: si la computadora tiene _ _ l l _, todavía debería poder filtrar las palabras.

Espero que eso sea lo que querías decir con un ejemplo, ¡espero que esto ayude! 😀

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar palabras que contengan letras específicas en orden, puedes usar expresiones regulares en Python. Así es como puedes modificar tu código para hacerlo:

    import re
    
    sorted_list = []
    
    for word in words:
        if re.search(".*e.*r.*s.*", word):
            sorted_list.append(word)
    
    print(sorted_list)
    

    En este ejemplo, .* significa “cualquier número de cualquier carácter”, por lo que .*e.*r.*s.* coincidirá con cualquier palabra que contenga las letras “e”, “r” y “s”, en ese orden, con cualquier número de caracteres en medio. Esta expresión regular distingue entre mayúsculas y minúsculas, por lo que coincidirá con “ERStaunding” pero no con “ersatz”.

    Ten en cuenta que es una buena práctica evitar usar nombres incorporados como sorted como nombres de variables.

Comments are closed.