我正在尝试读取两个文本文件,然后搜索每个文本文件中最常长度为5的字符串.
我写的代码:
db = open("list_of_2","r").read()
lp = open("lastpass","r").read()
word = ''
length = 0
for dbchar in db:
for lpchar in lp:
if dbchar == lpchar:
word += str(dbchar)
length += 1
else:
length = 0
word = ''
if length > 4:
print(word)
Run Code Online (Sandbox Code Playgroud)
代码当前一遍又一遍地打印像'-----'和'55555'这样的字符串,似乎没有打破循环(这些特殊的字符串只出现lp一次).我也不相信这是找到字符串,不一样的角色重复.
如何将代码更改为:
编辑:这是一些模拟文本文件.在这些中,字符串'ghtyty'在file1中出现三次,在file2中出现4次.代码应该打印'ghtyty'一次到控制台.
我建议采用不同的方法.将文件拆分为单词并仅保留5个字符或更大的单词.使用集合来查找交叉点 - 这会更快.
db_words = set([x for x in db.split() if len(x) > 4])
lp_words = set([x for x in lp.split() if len(x) > 4])
matches = db_words & lp_words
Run Code Online (Sandbox Code Playgroud)
如果要排除所有相同字符的单词,可以像这样定义列表解析:
[x for x in db.split() if len(x) > 4 and x != x[0]*len(x)]
Run Code Online (Sandbox Code Playgroud)
如果您要查找匹配的任何连续字符序列,这可能会更好:
i_skip = set() # characters to skip if they are already in a printed word
j_skip = set()
for i in range(len(db)-4):
if i in i_skip: continue
for j in range(len(lp)-4):
if j in j_skip: continue
if db[i] == lp[j]:
word_len = 5
while db[i:i+word_len] == lp[j:j+word_len]:
if db[i:i+word_len+1] == lp[j:j+word_len+1]:
word_len += 1
else:
print(db[i:i+word_len])
i_skip.update(range(i, i+word_len))
j_skip.update(range(j, j+word_len))
break
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |