Palabras individuales en una lista y luego imprimiendo las posiciones de esas palabras

Necesito ayuda con un progtwig que identifica palabras individuales en una oración, las almacena en una lista y reemplaza cada palabra en la oración original con la posición de esa palabra en la lista. Esto es lo que tengo hasta ahora.

por ejemplo:

'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR' COUNTRY 

se recrearía como 1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5

 from collections import OrderedDict sentence = input("Please input a sentence without punctuation").upper() punctuation = ("`1234567890-=¬!£$%^&*()_+\|[];'#,./{}:@~?") FilteredSentence = ("") for char in sentence: if char not in punctuation: FilteredSentence = FilteredSentence+char FilteredSentence = FilteredSentence.split(" ") refined = list(OrderedDict.fromkeys(FilteredSentence)) 

Me las arreglé para identificar las palabras individuales en la lista, sin embargo me resulto cómo reemplazar las palabras en la lista original con las posiciones de las palabras individuales.

También puede crear un diccionario que mapee las palabras con su posición inicial, luego usarlo para sustituir las palabras con sus respectivas posiciones.

 >>> s = 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY' >>> >>> >>> l = s.split() >>> l ['ASK', 'NOT', 'WHAT', 'YOUR', 'COUNTRY', 'CAN', 'DO', 'FOR', 'YOU', 'ASK', 'WHAT', 'YOU', 'CAN', 'DO', 'FOR', 'YOUR', 'COUNTRY'] >>> >>> d = dict((s, l.index(s)+1) for s in set(l)) >>> d {'DO': 7, 'COUNTRY': 5, 'CAN': 6, 'WHAT': 3, 'ASK': 1, 'YOUR': 4, 'NOT': 2, 'FOR': 8, 'YOU': 9} >>> list(map(lambda s: d[s], l)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5] >>> 

¿Me gusta esto? Simplemente haga una lista de comprensión para obtener todos los índices de todas las palabras.

 In [77]: sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" In [78]: words = sentence.split() In [79]: [words.index(s)+1 for s in words] Out[79]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5] 

La manera ingenua de hacerlo.

 mystr = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" a = mystr.split(" ") k = dict() cnt = 1 b = [] for m in a: if m not in k: k[m] = str(cnt) cnt = cnt + 1 b.append(k[m]) print ",".join(b) 

La versión más corta.

 mystr = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" a = mystr.split(" ") print ",".join([str(a.index(k)+1) for k in a]) 

En lugar de OrderedDict, puedes usar un juego.

 refined = list(set(FilteredSentence)) 

que puede comprobar cada palabra contra la lista.

 index_list = [] for word in FilteredSentence: index_list.append(refined.index(word) +1) 

index_list es el resultado que pediste

Solo un refinamiento de una respuesta existente, puede usar un diccionario de comprensión para crear la búsqueda de palabra a índice:

 >>> lookup = {w:(i+1) for i, w in list(enumerate(refined)) } >>> lookup {'DO': 7, 'WHAT': 3, 'FOR': 8, 'COUNTRY': 5, 'NOT': 2, 'CAN': 6, 'ASK': 1, 'YOU': 9, 'YOUR': 4} 

Luego use una lista de comprensión para generar los índices de salida:

 >>> [lookup[w] for w in FilteredSentence] [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5]