Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';这个回路不能正常工作吗?(Python)_Python_Loops - Fatal编程技术网

为什么赢了';这个回路不能正常工作吗?(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