0

Es tut mir leid, wenn ich dies im falschen Forum poste, aber gibt es irgendeine Möglichkeit, meinen Code zu verbessern, um schneller mit Multithreads, Prozessen oder anderen Verbesserungen zu laufen?Python mit Multithreads optimieren?

Der Zweck dieses Skripts ist es, alle möglichen Wörter für ein Scrabble-Spiel basierend auf dem eingegebenen Wort zu finden und seinen Scrabble-Score zu berechnen.

Wenn ich ein Wort mit mehr als 7 Zeichen eingeben, dauert es ewig, bis die Berechnungen durchgeführt sind.

scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, 
    "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, 
    "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, 
    "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, 
    "x": 8, "z": 10} 

WORDS = [] 
combs = dict() 

def prepareDict(file): 
    try: 
     f = open(file, 'r') 
     for line in f: 
      WORDS.append(line.rstrip().lower()) 
    except OpenErrors: 
     print("Could not open file") 
    finally: 
     f.close() 

def combinations(word): 
    for i in range(len(word)+1): 
     combList = itertools.permutations(word, i) 
     for item in combList: 
      item = ''.join(item) 
      if item in WORDS: 
       value = 0 
       for c in item: 
        value += int(scores.get(c)) 
       combs[item] = value 
    return (combs) 

if __name__ == "__main__": 
prepareDict('sowpods.txt') 
if len(sys.argv) > 2 or len(sys.argv) < 2: 
    print("usage: %s <word>" % sys.argv[0]) 
    sys.exit(1) 
else: 
    word = sys.argv[1].lower() 

combs = combinations(word) 
sorted_combs = sorted(combs.items(), key=operator.itemgetter(1), reverse=True) 
for word in sorted_combs: 
    print(word) 

Antwort

0

ändern WORDS = [] in ein set():

WORDS = set() 

dann die Methode ändern Worte, um es hinzuzufügen:

aus:

WORDS.append(line.rstrip().lower()) 

zu:

WORDS.add(line.rstrip().lower()) 

Kein Grund, eine Liste dafür zu verwenden. Dies sollte die Leistung verbessern.

+0

Wow, danke. Das hat wirklich die Performance verbessert! Danke vielmals. – LarmadVara

Verwandte Themen