看板 Python 關於我們 聯絡資訊
我想要將一些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
flarehunter: 首先把變數名稱寫的更清楚一點可能可以找到bug 03/21 12:03
flarehunter: 像是if i in n and i in c and i in m 03/21 12:04
flarehunter: 就完全不知道是什麼意思 03/21 12:04
好的,抱歉 因為我把每一行分成三個位置 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 也有條件是只出現在某兩個或只出現在某一個
ccwang002: 如果你有 sample data 我想寫一篇怎麼使用 pdb debug 03/21 13:44
我不是用pdb喔,不過也很希望能看一下 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 14:43:19
ccwang002: pdb 是 Python 內建的 debugger 03/21 16:06
了解,我以為是某資料庫的sample data ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 16:46:01 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 17:59:44
ccwang002: 我好像懂為什麼會重覆了,你的 if 可能不是 exculsive 03/21 18:06
ccwang002: 所以第一個 if 執行完就會再執行下一個 if,就會有兩行 03/21 18:07
ccwang002: 可以每個 if 中加個 continue 或用 if ... elif 結構 03/21 18:08
我是有想過會再執行別的if,但是我應該已經用了if 的內容判斷式避免到再做這個動作吧? 因為我所想的狀況是利用這七個判斷式內容條件的不同 每一個ID應該只會對應到一個if 的狀況,但很明顯有些ID對應到兩三個if的狀況 因此我才很疑惑,我這七個的if判斷式應該是互斥的阿.... ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:13:42
ccwang002: 等等,你把 8 種狀況都寫了我不覺得是 if 的問題 03/21 18:14
ccwang002: 感覺是不同 filename 或 row 有重覆的 domain 03/21 18:14
對,這三個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
ccwang002: 你的 domain 判斷在 row 的 for loop 裡喔 03/21 18:22
ccwang002: 每讀一行都會把 domain 分類寫出來,這感覺很會重覆 03/21 18:23
這個原因是因為我不是要讀完所有的檔案一次做分析 而是要一個一個讀檔各自做分析,我是希望每讀一個檔案就用裡面的domain做分析一次 然後換下一個檔案時再把全部清空 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:26:48
ccwang002: 你是要讀一個檔分析一次而不是讀「一行」分析一次吧? 03/21 18:28
是的,所以是迴圈中出錯誤了嗎? ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:30:02
ccwang002: 是的,你要把 for i in domain 移到 csv.reader(f) 外 03/21 18:30
ccwang002: 現在流程是:開 csv,讀一行 + 更新 ncm + 判斷 domain 03/21 18:31
ccwang002: 你想要的:開 csv,讀一行 + 更新 cnm,讀完判斷 domai 03/21 18:32
ccwang002: 簡單來說,for in domain 往外縮排一格,然後要注意 03/21 18:34
好的,我試試看,非常感謝 ※ 編輯: sariel0322 (182.234.196.206), 03/21/2015 18:35:05
ccwang002: n/m/c.clear()。改成每讀檔的時候 n = set() 重建吧 03/21 18:34
好的,非常感謝 ※ 編輯: 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