看板 Python 關於我們 聯絡資訊
我有兩個純文字檔 ①Keyword.txt:待整理的關鍵字集 ②NG.txt:已確定剔除的關鍵字集 兩個檔案都是每行一個關鍵字,各約1000行 我的工作是把Keyword.txt和NG.txt比對,如果Keyword.txt中的關鍵字未收錄在NG.txt裡 ,則寫入Temp.txt 我的做法是把NG.txt的內容存成字典,然後將Keyword.txt中的關鍵字逐一與字典比對 但這個方法似乎效率不太好,花了1分鐘以上的時間才完成 所以想請教有無更高效率的做法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 216.151.180.98 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1551544071.A.CF1.html
Sunal: 你每讀一行NG就要開檔關檔一次? 另外不要用關鍵字當變數名03/03 00:31
Sunal: 其實是開檔兩次 temp.txt跟ketword.txt03/03 00:33
Sunal: 一次讀完NG & keyword檔案再一次寫到 temp.txt就好03/03 00:34
變數是我貼文時沒改到,不好意思。我不確定是否是頻繁讀寫拖慢效率,因為我在其他地 方也有更多次數的讀寫,但耗費的時間仍少於20秒,所以我才想是否是比對字典太花時間 。
djshen: O(n)的東西寫成O(n^2)..03/03 00:44
對,早上起來再看就發現錯了QQ
TitanEric: set difference 03/03 01:03
謝謝,這個方法還沒用過,我測試看看效率
edwar: t=open 到 t.close 的縮排位置錯了, 要跟第一個for一樣03/03 01:36
對,昨晚沒看出來QQ
nini200: keyword集合A NG集合B A-B?03/03 01:36
edwar: 還有,存放NG關鍵字dict的變數名字最好換一下,比如用ng03/03 01:38
edwar: 變數名字取dict可能會有問題03/03 01:40
變數是我貼文時沒改到,不好意思。
lemon651: set difference 就解了阿03/03 02:41
lemon651: 既然你都知道有set或是dict這種數據結構 怎麼會想要每查03/03 02:44
lemon651: 一個字打開另一個檔爬一遍阿...03/03 02:44
lemon651: 我建議看一下你其他地方的文件讀寫是不是也是這種寫法,03/03 02:46
lemon651: 計算不花時間,io的時間不知道耗費了多少03/03 02:46
其他地方也有類似寫法,但都效率正常,不過我還是Review一下有沒有問題,謝謝。
p8p8: 你的兩個for loop要在同一個indent啦~03/03 04:22
對,早上重看codes就發現錯了…暈
p8p8: 你現在這樣是nested loop,造成每讀一行NG.txt,就讀取一整03/03 04:22
p8p8: 個Keyword.txt一次,那當然效率很差03/03 04:22
p8p8: 本來應該是O(N+M)的,你的寫法是O(NM)差很多03/03 04:22
p8p8: 還有跟前幾樓說的一樣,用set即可不需用dictionary03/03 04:23
謝謝,其實那段code是節錄出來再改掉變數名才貼的。使用dict的原因是在原程式中另有 用途。不過單純就這段目的而言確實如您所說用set就好了。 ※ 編輯: shala (209.234.253.197), 03/03/2019 09:44:46
sean50301: ahocorasick03/03 16:40
utopia12: Don’t use naive solutions, try elasticsearch 03/04 04:43
shala: 可以解釋為什麼嗎?謝謝03/04 17:44
※ 編輯: shala (45.56.161.176), 03/13/2019 21:25:37