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

看板Python作者 (sariel)時間10年前 (2015/03/21 10:57), 10年前編輯推噓2(2016)
留言18則, 2人參與, 最新討論串1/2 (看更多)
我想要將一些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,但很明顯不是... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.196.206 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1426906661.A.1E4.html

03/21 12:03, , 1F
首先把變數名稱寫的更清楚一點可能可以找到bug
03/21 12:03, 1F

03/21 12:04, , 2F
像是if i in n and i in c and i in m
03/21 12:04, 2F

03/21 12:04, , 3F
就完全不知道是什麼意思
03/21 12:04, 3F
好的,抱歉 因為我把每一行分成三個位置 row[1],row[-1],row[2]~[-2] 然後建立三個set,分別是n、c、m n => row[1],c => row[-1],m => row[2]~row[-2] 然後判斷式則是判斷出現在哪幾個set裡面,像是: if i in n and i in c and i in m 這邊我想表達的是特定的ID都有出現在這三個set 也有條件是只出現在某兩個或只出現在某一個

03/21 13:44, , 4F
如果你有 sample data 我想寫一篇怎麼使用 pdb debug
03/21 13:44, 4F
我不是用pdb喔,不過也很希望能看一下 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 14:43:19

03/21 16:06, , 5F
pdb 是 Python 內建的 debugger
03/21 16:06, 5F
了解,我以為是某資料庫的sample data ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 16:46:01 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 17:59:44

03/21 18:06, , 6F
我好像懂為什麼會重覆了,你的 if 可能不是 exculsive
03/21 18:06, 6F

03/21 18:07, , 7F
所以第一個 if 執行完就會再執行下一個 if,就會有兩行
03/21 18:07, 7F

03/21 18:08, , 8F
可以每個 if 中加個 continue 或用 if ... elif 結構
03/21 18:08, 8F
我是有想過會再執行別的if,但是我應該已經用了if 的內容判斷式避免到再做這個動作吧? 因為我所想的狀況是利用這七個判斷式內容條件的不同 每一個ID應該只會對應到一個if 的狀況,但很明顯有些ID對應到兩三個if的狀況 因此我才很疑惑,我這七個的if判斷式應該是互斥的阿.... ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:13:42

03/21 18:14, , 9F
等等,你把 8 種狀況都寫了我不覺得是 if 的問題
03/21 18:14, 9F

03/21 18:14, , 10F
感覺是不同 filename 或 row 有重覆的 domain
03/21 18:14, 10F
對,這三個n、c、m集合都會有重複的domain沒錯 雖然有不同的filename,但是我在最後都會把這些集合清空 而且我的集合是用set(),if 判斷式的條件也有把這三個集合有重複的ID考慮進去了 而且我感覺是if的問題的原因是我的結果像是 3 domain protein 這一個filename就跑出兩個if 的結果了 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:19:17

03/21 18:22, , 11F
你的 domain 判斷在 row 的 for loop 裡喔
03/21 18:22, 11F

03/21 18:23, , 12F
每讀一行都會把 domain 分類寫出來,這感覺很會重覆
03/21 18:23, 12F
這個原因是因為我不是要讀完所有的檔案一次做分析 而是要一個一個讀檔各自做分析,我是希望每讀一個檔案就用裡面的domain做分析一次 然後換下一個檔案時再把全部清空 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:26:48

03/21 18:28, , 13F
你是要讀一個檔分析一次而不是讀「一行」分析一次吧?
03/21 18:28, 13F
是的,所以是迴圈中出錯誤了嗎? ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:30:02

03/21 18:30, , 14F
是的,你要把 for i in domain 移到 csv.reader(f) 外
03/21 18:30, 14F

03/21 18:31, , 15F
現在流程是:開 csv,讀一行 + 更新 ncm + 判斷 domain
03/21 18:31, 15F

03/21 18:32, , 16F
你想要的:開 csv,讀一行 + 更新 cnm,讀完判斷 domai
03/21 18:32, 16F

03/21 18:34, , 17F
簡單來說,for in domain 往外縮排一格,然後要注意
03/21 18:34, 17F
好的,我試試看,非常感謝 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:35:05

03/21 18:34, , 18F
n/m/c.clear()。改成每讀檔的時候 n = set() 重建吧
03/21 18:34, 18F
好的,非常感謝 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:44:58 有了,非常感謝,目前只遇到一個新的問題... 只有3 domain protein也是我第一個圖讀的資料是錯誤的,有點奇怪,總之非常感謝你的幫忙 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:47:25 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:48:33
文章代碼(AID): #1L3Dub7a (Python)
文章代碼(AID): #1L3Dub7a (Python)