Ein Programm, das einzelne Wörter in einem Satz identifiziert, diese in einer Liste speichert und jedes Wort durch die Position dieses Wortes in der Liste ersetzt

Ich entwickle ein Programm, das einzelne Wörter in einem Satz identifiziert, diese in einer Liste speichert und jedes Wort im ursprünglichen Satz mit der Position dieses Wortes in der Liste ersetzt, so dass der Satz aus den Positionen dieser Wörter in diesem wiederhergestellt werden kann Liste mit der Sequenz 1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5 . Mein Code so weit ist unten, aber ich brauche einen Rat, wie man es effizienter und kürzer macht:

 import time sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" s = sentence.split() another = [0] time.sleep(0.5) print(sentence) for count, i in enumerate(s): if s.count(i) < 2: another.append(max(another) + 1) else: another.append(s.index(i) +1) another.remove(0) time.sleep(0.5) print(another) 

4 Solutions collect form web for “Ein Programm, das einzelne Wörter in einem Satz identifiziert, diese in einer Liste speichert und jedes Wort durch die Position dieses Wortes in der Liste ersetzt”

Hier ist ein linearer Algorithmus:

 position = {} # word -> position words = sentence.split() for word in words: if word not in position: # new word position[word] = len(position) + 1 # store its position print(*map(position.__getitem__, words), sep=",") # -> 1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5 

Der print() Aufruf verwendet die Python 3 * -Syntax, um das von map() Ergebnis auszupacken, das hier die Positionen für die entsprechenden Wörter zurückgibt. Siehe Was bedeutet ** (Doppelstern) und * (Stern) für Parameter?

Um eine Liste von Wortpositionen in sentence und den ursprünglichen Satz aus dieser Liste neu sentence erstellen:

 sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" s = sentence.split() positions = [s.index(x)+1 for x in s] recreated = [s[i-1] for i in positions] # the reconstructed sentence print(" ".join(recreated)) # the list of index numbers/word positions print(positions) # the positions as a space separated string of numbers print(" ".join(positions) 

Listen sind null-indexiert, so dass das erste Element Index 0 ist, nicht 1. Du könntest natürlich 1 zu allen Indizes in das Listenverständnis hinzufügen, wenn du es bei 1 anfangen wolltest.

Um genau die gleiche Ausgabe zu erhalten, wie dein Skript produziert:

 sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" s = sentence.split() positions = [s.index(x)+1 for x in s] print(sentence) print(positions) 

Ausgabe:

 ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5] 
 sentence = 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY' words = sentence.split() # Counting backwards through the words means the last seen one will have # the lowest index without needing 'if' tests or incrementing counters. positions = {word:index for index, word in reversed(list(enumerate(words, 1)))} print(' '.join(str(positions.get(word)) for word in words)) 

Versuchen Sie es auf repl.it hier: https://repl.it/CHvy/0

Nicht furchtbar effizient, aber zwei Zeilen.

 words = sentence.split() positions = [words.index(word) + 1 for word in words] 

Beachten Sie, dass list.index(entry) den Index des ersten Vorkommens des entry list.index(entry) . Wenn Sie in Ordnung mit 0-basierten Indizes sind, dann ist das folgende ziemlich prägnant:

 positions = list(map(words.index, words)) 
  • Sind Strings zwischengespeichert?
  • Überprüfen Sie, ob String Datum hat, jedes Format
  • Trimmen eines Strings in Python
  • Eine gemischte Liste in einen String verwandeln, Zitate nur für Strings halten
  • Holen Sie sich einen String nach einem bestimmten Teilstring
  • Python: Split durch 1 oder mehr Vorkommen eines Trennzeichens
  • Ersetzen Sie das Zeichen in der Datei
  • Python: Verwenden von vars (), um eine Variable einer Variablen zuzuweisen
  • Python Triple String Zitat Erklärung
  • Split-String nach Anzahl der Zeichen
  • Split String in eine Liste, mit Gegenständen von gleicher Länge
  • Python ist die beste Programmiersprache der Welt.