作者sariel0322 (sariel)
看板Python
标题[问题] 找不出问题在哪里
时间Sat Mar 21 10:57:38 2015
我想要将一些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://webptt.com/cn.aspx?n=bbs/Python/M.1426906661.A.1E4.html
1F:推 flarehunter: 首先把变数名称写的更清楚一点可能可以找到bug 03/21 12:03
2F:→ flarehunter: 像是if i in n and i in c and i in m 03/21 12:04
3F:→ 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
也有条件是只出现在某两个或只出现在某一个
4F:推 ccwang002: 如果你有 sample data 我想写一篇怎麽使用 pdb debug 03/21 13:44
我不是用pdb喔,不过也很希望能看一下
※ 编辑: sariel0322 (182.234.196.206), 03/21/2015 14:43:19
5F:→ 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
6F:→ ccwang002: 我好像懂为什麽会重覆了,你的 if 可能不是 exculsive 03/21 18:06
7F:→ ccwang002: 所以第一个 if 执行完就会再执行下一个 if,就会有两行 03/21 18:07
8F:→ 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
9F:→ ccwang002: 等等,你把 8 种状况都写了我不觉得是 if 的问题 03/21 18:14
10F:→ 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
11F:→ ccwang002: 你的 domain 判断在 row 的 for loop 里喔 03/21 18:22
12F:→ ccwang002: 每读一行都会把 domain 分类写出来,这感觉很会重覆 03/21 18:23
这个原因是因为我不是要读完所有的档案一次做分析
而是要一个一个读档各自做分析,我是希望每读一个档案就用里面的domain做分析一次
然後换下一个档案时再把全部清空
※ 编辑: sariel0322 (182.234.196.206), 03/21/2015 18:26:48
13F:→ ccwang002: 你是要读一个档分析一次而不是读「一行」分析一次吧? 03/21 18:28
是的,所以是回圈中出错误了吗?
※ 编辑: sariel0322 (182.234.196.206), 03/21/2015 18:30:02
14F:→ ccwang002: 是的,你要把 for i in domain 移到 csv.reader(f) 外 03/21 18:30
15F:→ ccwang002: 现在流程是:开 csv,读一行 + 更新 ncm + 判断 domain 03/21 18:31
16F:→ ccwang002: 你想要的:开 csv,读一行 + 更新 cnm,读完判断 domai 03/21 18:32
17F:→ ccwang002: 简单来说,for in domain 往外缩排一格,然後要注意 03/21 18:34
好的,我试试看,非常感谢
※ 编辑: sariel0322 (182.234.196.206), 03/21/2015 18:35:05
18F:→ 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