python – 需要帮助更快地进行排列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 需要帮助更快地进行排列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2463字,纯文字阅读大概需要4分钟。
内容图文
![python – 需要帮助更快地进行排列](/upload/InfoBanner/zyjiaocheng/762/6435dca7f32d4a04b0edcf1a17afc63f.jpg)
这是我的工作代码,我试图找到方法使其更快地找到有效的单词,我正在考虑为每个单词制作单独的字典列表,你会怎么想?
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()
解决方法:
如果您过于热衷于提高速度而不考虑其可读性,则可以尝试以下方法
def is_valid(str1,list1):
return str1 in list1
words=["BAD","CAB","BEC"]
def generate2(words,letters):
answers=[]
[[answers.append(''.join(x).upper()) for x in itertools.permutations(letters,length) if ''.join(x).upper() in words] for length in range(2,len(letters)+1)]
#print(answers)
return answers
List comprehension is faster than loops.所以将两个循环组合成一个单一的理解.声明除外
word=''
for let in x:
word+=let
if is_valid(word.upper(),words):
可以组合成if is_valid(”.join(x).upper,words)甚至”.join(x).upper in words,记住函数调用是昂贵的.
我在速度和外观上进行了比较,列表理解速度提高了50%.
它现在由你来决定
>>> stmt1="""
def is_valid(str1,list1):
valid=False
if str1 in list1:
valid=True
return valid
words=["BAD","CAB","BEC"]
def generate1(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)
return answers
generate1(words,['A','B','C','D','E'])
"""
>>>
>>> stmt2="""
def is_valid(str1,list1):
return str1 in list1
words=["BAD","CAB","BEC"]
def generate2(words,letters):
answers=[]
[[answers.append(''.join(x).upper()) for x in itertools.permutations(letters,length) if ''.join(x).upper() in words] for length in range(2,len(letters)+1)]
#print(answers)
return answers
generate2(words,['A','B','C','D','E'])
"""
>>>
>>> t1=timeit.Timer(stmt=stmt1)
>>> t2=timeit.Timer(stmt=stmt2)
>>> t1.repeat(number=1000)
>>> t2=timeit.Timer(stmt=stmt2)
>>> t1.repeat(number=1000)
[0.47923321640178074, 0.4353549521401874, 0.4362746333173959]
>>> t2.repeat(number=1000)
[0.2536238984591819, 0.2470974750062851, 0.24726312027155473]
内容总结
以上是互联网集市为您收集整理的python – 需要帮助更快地进行排列全部内容,希望文章能够帮你解决python – 需要帮助更快地进行排列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。