python - 读取文件并在其中找到字谜
问题描述
我有一个问题,我需要在一个文件中找到所有的字谜。
我知道如何找到字谜,我正在使用 sorted() 函数来做到这一点。
我的问题是我必须在文件中找到它。文件有 4000 行,每行只有一个单词。
我使用的逻辑是两次使用 2 个文件指针 fp1 和 fp2 打开文件两次。然后我使用嵌套的for循环,对于fp1中的每个单词,我使用排序函数将它与fp2中的每个单词进行比较。我确实得到了输出,但由于它是 4000 个字和两个文件指针,它变得非常慢。
如果我尝试一次读取整个文件并存储在列表中,则脚本会挂起。
有没有更好的方法来做到这一点。任何帮助将不胜感激。
我已经添加了代码:
def isPalindrome(filepo):
count=0
for word in filepo:
word=word.strip()
if(word==word[::-1]):
count=count+1
print (word + " is palindrome")
print( count)
def isAnagram(fp1,fp2):
anagramcount=0
for word in fp1:
anagramlist=[]
word=word.strip()
for secword in fp2:
secword=secword.strip()
if(word != secword):
if(sorted(word)==sorted(secword)):
anagramlist.append(secword)
fp2.close()
fp2=open("English.txt",'r')
if(len(anagramlist)>0):
anagramcount=anagramcount+1
#print(word+ " is an anagram with possible combinations:")
#for x in anagramlist:
#print(x)
print("Total anagrams are: ",anagramcount)
file1=open("English.txt",'r')
isPalindrome(file1)
file1.close()
file2=open("English.txt",'r')
file3=open("English.txt",'r')
isAnagram(file2,file3)
我可以一次读取文件,但是由于文件很大,有 4000 行,所以它变得很慢。有什么好方法可以让它快速
解决方案
您可以加载字典中的所有单词,该字典键入每个单词的排序字母。然后只保留其中包含多个单词的条目。
anagrams = dict()
for word in wordList: # list loaded from the file (or read lines directly from file)
anagrams.setdefault(sorted(word),[]).append(word)
anagrams = [ words for words in anagrams.values() if len(words)>1 ]
推荐阅读
- java - 如何在特定时区的特定时间(如 12:00:00.000)获取日期实例?
- sql - 使用查询/代码动态创建的 SQL 作业
- java - 我应该如何在 Google Play 管理中心启用我的 AdMob 真实 ID?
- xamarin.forms - 有没有办法在 Xamarin Forms 中使用相机功能而无需下载任何额外的 NuGet 包?
- java - Spring Boot 应用程序未在外部 Tomcat 中启动(在 Tomcat 8.5 和 10 中均已尝试)
- canvas - 如何在画布中旋转渐变,注意:不是画布本身
- docker - 在同一个 Docker 网络中发出 HTTP 请求
- arm - 用于高速微控制器测试台控制器/数据采集器的系统架构
- azure - 从 Azure DevOps 设置应用服务连接字符串
- c# - 等待 for 循环完成