我有一系列難題:字母或單詞之間沒有空格的莫爾斯電碼字符串。我的計劃是做字典攻擊以找到最佳解決方案候選人。我的武器是Python。從列表中消除半重複項的高性能方式
我有17000個英文單詞的列表。我還有一個與拼圖主題相關的單詞列表,如果這些單詞出現,他們應該得分更高。
因此,在我的腳本開始時,當我生成單詞列表時,我使用了形式(單詞,scoremultiplier)的元組列表。這裏有一個小的子集:
[('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甚至沒有一個完整的解釋。 (除了完成所需的時間之外,該代碼還沒有經過測試,所以它甚至可能不起作用。)它似乎也非常不pythony,儘管我現在剛剛學習Python(並且完成了我的一些第一次編程)與這個非常項目。
有沒有更好的方法來做到這一點?我不能使用set()
,因爲重複的單詞是非等元組的一部分。我需要以某種方式重組我的數據嗎?或者我應該每次運行這個時候都準備好等一整分鐘?
如果你可以使用==,你應該可以使用'set'。 「重複的單詞不是100%重複」是什麼意思? –
我澄清了那句話;重複的單詞是非等元組的成員。所以如果我使用'set()',這兩個單詞仍然存在。 –
很酷的問題,請你能與我們分享一個鏈接? –