我有一系列谜题:摩尔斯电码字符串中没有字母或单词之间的空格。 我的计划是进行字典攻击以找到最佳解决方案候选者。 我的武器是Python。
我有一个包含17000个英文单词的列表。我还有一个与谜题主题相关的较小单词列表,如果这些单词出现,则应该得分更高。
因此,在我的脚本最开始生成单词列表时,我使用一组元组列表,形式为(单词,分数乘数)。以下是一个小子集:
在我解析的文件中,我想要将高价值词汇放在末尾,而不必手动删除文件主体中的任何重复内容。因此,我需要编写一些代码来删除早期元组的第一个值等于后面元组第一个值的情况。
我可以使用暴力方法来实现:
但是光是脚本的那一部分就需要将近45秒的时间,而且我这17000个单词还没有完全覆盖整个字典。(那段代码也没有经过测试,所以它可能根本不起作用。)看起来这种方法也不是很Pythonic,尽管我现在刚开始学习Python(并且这个项目是我首次编程)。
有更好的方法吗?我不能使用
我有一个包含17000个英文单词的列表。我还有一个与谜题主题相关的较小单词列表,如果这些单词出现,则应该得分更高。
因此,在我的脚本最开始生成单词列表时,我使用一组元组列表,形式为(单词,分数乘数)。以下是一个小子集:
[('zoned', 1.0),
('zonely', 1.0),
('zoner', 1.0),
('zones', 1.0),
('zoning', 1.0),
('zoo', 1.0),
('zoom', 1.0),
('zoomed', 1.0),
('zooming', 1.0),
('zooms', 1.0),
('zoos', 1.0),
('ten', 1.0),
('tens', 1.0),
('gnash', 1.0),
('shag', 1.0),
('75th', 2.0),
('seventy', 2.0),
('fifth', 2.0)]
在我解析的文件中,我想要将高价值词汇放在末尾,而不必手动删除文件主体中的任何重复内容。因此,我需要编写一些代码来删除早期元组的第一个值等于后面元组第一个值的情况。
我可以使用暴力方法来实现:
for firstkey, (firstword, firstfactor) in enumerate(wordlist):
for laterkey, (laterword, laterfactor) in enumerate(wordlist[firstkey+1:]):
if firstword == laterword:
del wordlist[firstkey]
break
但是光是脚本的那一部分就需要将近45秒的时间,而且我这17000个单词还没有完全覆盖整个字典。(那段代码也没有经过测试,所以它可能根本不起作用。)看起来这种方法也不是很Pythonic,尽管我现在刚开始学习Python(并且这个项目是我首次编程)。
有更好的方法吗?我不能使用
set()
,因为重复的单词是不相等的元组的一部分。我需要重新构造我的数据吗?或者每次运行时都要准备等待整整一分钟?
set()
,两个单词仍将存在。 - 75th Trombone