如果两个字母变为0,如何从文件中的字符串中查找单词(Python 3)
我没有任何代码,因为我实际上不知道如何解决这个问题。所以如果你能帮我想出一些算法或者我不知道,我会很高兴的 我有一个由字母和两个如果两个字母变为0,如何从文件中的字符串中查找单词(Python 3),python,python-3.x,Python,Python 3.x,我没有任何代码,因为我实际上不知道如何解决这个问题。所以如果你能帮我想出一些算法或者我不知道,我会很高兴的 我有一个由字母和两个0组成的列表。Zero对单词中的两个字母进行编码。在这个列表的某个地方有一个来自文件的单词。该文件由不同的捷克语单词填充(相当大) 我需要从列表中的文件中找到一个单词,并解码其中的零个字母 输入示例: ['a','t','0','l','u','r','i','0','r','x'] 文件中的数据示例:(通常为32000字) 远程传送 心灵传送 传送 传送带 传送卫星
0
组成的列表。Zero对单词中的两个字母进行编码。在这个列表的某个地方有一个来自文件的单词。该文件由不同的捷克语单词填充(相当大)
我需要从列表中的文件中找到一个单词,并解码其中的零个字母
输入示例:
['a','t','0','l','u','r','i','0','r','x']
文件中的数据示例:(通常为32000字)
- 远程传送
- 心灵传送
- 传送
- 传送带
- 传送卫星
- 传送带
- 心灵感应
- teleskop
- teleskopu
- 图文电视
- 特莱蒂娜
- 特莱图
- 电视剧
- 特勒
- 泰勒里德
- tematicky
- 吐血
- 特梅纳
我能马上想到的最佳解决方案是研究使用trie。你可以把你的单词列表放入trie中。然后使用您的输入,您只需遍历trie,而忽略任何“0”。一旦你击中一片叶子,你就可以返回你得到的单词
稍微介绍一下Trie-s:对于非最佳解决方案,您可以在单词列表上迭代
word = "t0luri0rx"
zeroindexes = [i for i, c in enumerate(word) if c == "0"]
strippedword = word.replace("0", "")
with open("wordsfile.txt") as wordsfile:
words = [line.strip().lower() for line in wordsfile.readlines()]
for checkword in words:
strippedcheckword = checkword
[del strippedcheckword[i] for i in zeroindexes]
if strippedcheckword in strippedword:
print(checkword)
您需要将wordsfile.txt
与python程序放在同一个文件夹中,除非您愿意设置工作目录。
或者,如果您对问题进行分类,并更清楚地说明省略了哪些字符,等等。您可以使用regex(re
模块)高效地查找您要查找的内容
正则表达式有点像这样:
import re
word = "t0luri0" # removing the rx for sake of clarity
word.replace("0", "[a-z]")
pattern = re.compile(word, re.IGNORECASE)
with open("wordsfile.txt") as wordsfile:
words = [line.strip() for line in wordsfile.readlines()]
for checkword in words:
match = re.match(pattern, checkword)
if match:
print(match.group())
但是,此解决方案将只匹配单词,例如
telurid
或tolurip
(不是一个单词,但如果它在文件中,它将匹配)。它不会匹配更短或更长的东西。我想您可以在正则表达式中插入一些标记来缓解这种情况。您的问题太宽泛了。请确保共享您迄今为止所尝试的内容以及一些可复制的代码块和示例数据文件,以便有人可以在此处提供帮助。所需的输出不应为teluridrx?不,仅为TeluridS。是否要忽略列表中的最后两个元素?我想从文件中查找一个单词,它可以比列表短,我想忽略所有其他字符。它可以是任何其他单词,因此,它并没有真正的帮助(但感谢您的帮助)trying@AnnaSereda对不起,那没有任何意义。
import re
word = "t0luri0" # removing the rx for sake of clarity
word.replace("0", "[a-z]")
pattern = re.compile(word, re.IGNORECASE)
with open("wordsfile.txt") as wordsfile:
words = [line.strip() for line in wordsfile.readlines()]
for checkword in words:
match = re.match(pattern, checkword)
if match:
print(match.group())