[問題] 找不出問題在哪裡

作者: sariel0322 (sariel)   2015-03-21 10:57:38
我想要將一些ID資料的屬性分門別類
(特定ID的位置例如出現在row[1]跟row[-1]的各算一類,row[1]~row[-1]算一類,不管row[0])
因此用set想說避免調資料重複
以下是我的code:
http://ppt.cc/63Ex
我讀取的資料大概是這種類型:
http://ppt.cc/wnWU
http://ppt.cc/Yytn
只有長度的問題
跑出來的結果:
http://ppt.cc/k72m
(上色是為了對答案,也是錯誤的地方,重複了)
遇到的問題:
原本依照我的分類應該會變成
>>> 特定的ID , 檔案名稱 , 該ID屬性 (e.g.Never present at C-terminal)
一個特定的ID跟一個檔案裡面應該只有一個屬性
但不知道為何變成
>>> 特定的ID , 檔案名稱 , 該ID屬性 (e.g.Never present at C-terminal)
>>> 同樣的ID , 同樣檔案名稱 , 不一樣ID屬性 (多了 Never present at either terminal)
個人認為應該是判斷式那邊出了問題(not in 的部分?),但是檢查了很久還是不知道問題在哪
還請大家幫我看一下到底哪裡出了問題
我原本認為應該一個 ID 只會跑進一個if,但很明顯不是...
作者: flarehunter (Range)   2015-03-21 12:03:00
首先把變數名稱寫的更清楚一點可能可以找到bug像是if i in n and i in c and i in m就完全不知道是什麼意思
作者: ccwang002 (亮)   2015-03-21 13:44:00
如果你有 sample data 我想寫一篇怎麼使用 pdb debugpdb 是 Python 內建的 debugger我好像懂為什麼會重覆了,你的 if 可能不是 exculsive所以第一個 if 執行完就會再執行下一個 if,就會有兩行可以每個 if 中加個 continue 或用 if ... elif 結構等等,你把 8 種狀況都寫了我不覺得是 if 的問題感覺是不同 filename 或 row 有重覆的 domain你的 domain 判斷在 row 的 for loop 裡喔每讀一行都會把 domain 分類寫出來,這感覺很會重覆你是要讀一個檔分析一次而不是讀「一行」分析一次吧?是的,你要把 for i in domain 移到 csv.reader(f) 外現在流程是:開 csv,讀一行 + 更新 ncm + 判斷 domain你想要的:開 csv,讀一行 + 更新 cnm,讀完判斷 domai簡單來說,for in domain 往外縮排一格,然後要注意n/m/c.clear()。改成每讀檔的時候 n = set() 重建吧

Links booklink

Contact Us: admin [ a t ] ucptt.com