需要帮助更快地进行排列

Bra*_*dge 3 python permutation

这是我的工作代码,我试图找到方法使其更快地找到有效的单词,我正在考虑为每个单词制作单独的字典列表,你会怎么想?

import random
import itertools

file_name='words.txt'

def load_words():
    try:
        f=open(file_name,'r')
        str1=f.read()
        f.close()
    except:
        print('Problem opening the file',file_name)
    list1=[]
    list1=str1.split()
    return(list1)

def is_valid(str1,list1):
    valid=False
    if str1 in list1:
        valid=True
    return valid

def generate(words,letters):
    answers=[]
    for length in range(2,len(letters)+1):
        for x in itertools.permutations(letters,length):
            word=''
            for let in x:
                word+=let
            if is_valid(word.upper(),words):
                answers.append(word)
                print(word)
    print(answers)

def main():
    words=load_words()
    letters = input('Enter your letters')
    answers = generate(words,letters)

main()
Run Code Online (Sandbox Code Playgroud)

eum*_*iro 5

将您更改list1为一组:

set1 = set(list1)
Run Code Online (Sandbox Code Playgroud)

测试str1 in set1将是多大的速度比str1 in list1,如果你频繁地做测试,名单很长.


Kyl*_*tan 5

首先,描述代码.那将告诉你缓慢的部分在哪里.

其次,您可以考虑将单词列表转换为一个集合,该集合应该有一个更快的"输入"运算符,用于检查单词是否存在.

第三,考虑简化代码以删除不必要的语句,例如.

def is_valid(str1,list1):
   return str1 in list1
Run Code Online (Sandbox Code Playgroud)