为什么赢了';这个回路不能正常工作吗?(Python)
以下是我想做的: 我正在比较两个文件 因此,有两个文件包含突变名称和一个与该突变相关的编号,称为为什么赢了';这个回路不能正常工作吗?(Python),python,loops,Python,Loops,以下是我想做的: 我正在比较两个文件 因此,有两个文件包含突变名称和一个与该突变相关的编号,称为aapos 在文件1中有t突变数,在文件2中有s突变数 现在,第2号文件中的突变具有特定的生物学意义,所以我要做的是查看文件1中的突变名称(在我的程序中称为标记名)是否与文件2中的标记名等效,以及该特定突变的aapos编号是否在文件编号2中的aapos1和aapos2范围内 如果这两个条件都满足,那么我在文件1中发现的突变具有特殊的生物学意义,我们称之为1类。否则,它将属于第二类,没有生物学意义 此外
aapos
在文件1中有t
突变数,在文件2中有s
突变数
现在,第2号文件中的突变具有特定的生物学意义,所以我要做的是查看文件1中的突变名称(在我的程序中称为标记名
)是否与文件2中的标记名等效,以及该特定突变的aapos编号是否在文件编号2中的aapos1和aapos2范围内
如果这两个条件都满足,那么我在文件1中发现的突变具有特殊的生物学意义,我们称之为1类。否则,它将属于第二类,没有生物学意义
此外,在这些文件中的每个文件中,都有一个名为“同义”的列,并且对于文件1中的每个变异,同义列都分配了一个0或1的数字
现在我想做的是:对于属于类别2的每个突变,如果该突变的同义
列为0,我希望计数器非同步2
加1,如果是1,那么我希望计数器syntwo
加1。本质上,对于属于类别2的所有突变,我需要一个计数,即在同义
列中有多少突变的赋值为0,有多少突变的赋值为1
然而,当程序运行时,我最终得到了nonsyntwo
和syntwo
的一个数字,这远远大于我正在使用的文件中的标记名数量。如果我将s
和t
两者都更改为15(每个文件中都有数千个标记名),那么nonsyntwo
的值为94
如果程序遍历15个标记名,这怎么可能呢
for x in range(1,s):
for b in range (1,t):
if tagname1[x]== tagname2[b]:
if int(aapos1[b]) <= int(aapos[x])<= int(aapos2[b]):
snps = snps + 1
elif int(synonymous[x]) == 0:
nonsyntwo = nonsyntwo + 1
elif int(synonymous[x]) == 1:
syntwo = syntwo + 1
elif tagname1[x]!= tagname2[b]:
if int(synonymous[x]) == 0:
nonsyntwo = nonsyntwo + 1
elif int(synonymous[x]) == 1:
syntwo = syntwo + 1
范围(1,s)内x的:
对于范围(1,t)内的b:
如果tagname1[x]==tagname2[b]:
如果int(aapos1[b])我不完全理解您试图做什么,当我开始命名假设时,它失控了,但这是您的问题:
elif tagname1[x]!= tagname2[b]:
if int(synonymous[x]) == 0:
nonsyntwo = nonsyntwo + 1
elif int(synonymous[x]) == 1:
syntwo = syntwo + 1
这适用于每对x,b
。这意味着它将至少执行(s-2)(t-2)
次。我怀疑这不是你想要的。你真的需要清楚地说明你的问题。我们不应该仅仅为了理解你在处理什么而挑出你的问题
我理解如下:
所以有两个文件包含突变的名称和一个数字,
称为aapos,与该突变相关。[...]
此外,在每个文件中,都有一列名为“同义”[…]
在文件号2中的aapos1和aapos2范围内
你有两个文件
第一个文件有三列:标记名、appos、同义
第二个文件有四列:标记名、aapos、appos2、同义
现在,第2号文件中的突变具有特定的生物学特性
意义,所以我想做的是看看突变的名字
文件1中的(在我的程序中称为标记名)与标记名等效
在文件2中,以及该特定突变的aapos编号
位于文件号2中的aapos1和aapos2范围内。[...]
如果这两个条件都满足,那么我在文件1中的突变有一个特殊的
生物学意义,我们称之为1类
如果第一列与文件1中的第一列匹配,则需要检查文件2中的每一行
如果匹配,并且第二列在file2中第二列和第三列的范围内,则需要将该行添加到名为category1的集合中;否则,添加到另一个名为category2的集合
在每个文件中,都有一个名为“同义”的列,用于
在文件1中的每个变异中,同义列都被分配了若干个
0或1。这就是我想做的:对于每一个属于我的突变
对于类别2,如果该突变的“同义”列为0,则I
希望计数器'nonsyntwo'加1,如果它是1,那么我希望
计数器'syntwo'添加1
从category2
集合中取出每个项目,并计算1的数量和0的数量
如果这是正确的,那么以下是您需要的(假设您的文件是逗号分隔的)
导入csv
从收款进口柜台
将open('file1.txt')作为f:
reader=csv.reader(f,分隔符=',')
file1=列表(读卡器)
将open('file2.txt')作为f:
reader=csv.reader(f,分隔符=',')
file2=列表(读卡器)
cat1=[]
cat2=[]
对于文件2中的行:
对于文件1中的第2行:
如果第[0]行==第2[0]行:
如果int(line2[1])我不清楚问题的性质。不过,我有以下改善建议:
aapos = map(int, appos)
aapos1 = map(int, appos1)
aapos2 = map(int, appos2)
synonyms = map(int, synonyms) # or are they already?
for x in range(1,s):
for b in range (1,t):
# Here, x and b go from 1 to s resp t.
# So you are always missing [0] of the array.
# Doing
x, b = x-1, b-1
# is not very clean, but it helps for now.
checksyn = True
if tagname1[x] == tagname2[b]:
if aapos1[b] <= aapos[x] <= aapos2[b]:
snps += 1
checksyn = False
if checksyn:
if synonymous[x] == 0:
nonsyntwo += 1
elif synonymous[x] == 1: # if 1 is the only other possible value, an else: would be enough here.
syntwo += 1
aapos=map(int,appos)
aapos1=映射(int,appos1)
aapos2=映射(int,appos2)
同义词=映射(int,同义词)#还是它们已经存在?
对于范围(1,s)内的x:
对于范围(1,t)内的b:
#这里,x和b分别从1到s。
#所以您总是缺少数组的[0]。
#做
x、 b=x-1,b-1
#它不是很干净,但现在有帮助。
checksyn=True
如果tagname1[x]==tagname2[b]:
如果aapos1[b]您意识到范围(1,s)中x的:范围(1,t)中b的:…
正在运行(s-1)*(t-1)次,而不是s+t,对吗?那么为什么nonsyntwo
的值为94,而s
和t
令人惊讶呢?也许我认为程序读取代码的方式是错误的。我的理解是,对于文件1中的每个标记名,它将遍历文件2中的所有标记名,并查看它们是否相等
aapos = map(int, appos)
aapos1 = map(int, appos1)
aapos2 = map(int, appos2)
synonyms = map(int, synonyms) # or are they already?
for x in range(1,s):
for b in range (1,t):
# Here, x and b go from 1 to s resp t.
# So you are always missing [0] of the array.
# Doing
x, b = x-1, b-1
# is not very clean, but it helps for now.
checksyn = True
if tagname1[x] == tagname2[b]:
if aapos1[b] <= aapos[x] <= aapos2[b]:
snps += 1
checksyn = False
if checksyn:
if synonymous[x] == 0:
nonsyntwo += 1
elif synonymous[x] == 1: # if 1 is the only other possible value, an else: would be enough here.
syntwo += 1