去一个字符串中的某个位置

时间:2012-04-28 02:07:17

标签: python string coordinates

我想在一个字符串上找到一个特定的点(从消极的一面)到我给出的字符串。

AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG                 TTTTTTTTTTGGGGGGGGGGAAAAAAAAAACCCCCCCCCC

所以你需要转换坐标。在底链上,碱基0(最右边的C)与顶部链上的碱基39相对。基数1与基数38相对。基数2与情况37相反。(重点:注意每次添加这两个数字时会发生什么情况。)因此,基数10与基数29相对,基数19与基数20相对。 / p>

所以:如果我想在底线上找到10-20的基数,我可以看一下顶部的20-29(然后反向补充它)。

我写了以下内容:

fp = open(infile, 'r')
for line in fp:
   tokens = line.split()
   exonstarts = tokens[8][:-1].split(',')
   exonends = tokens[9][:-1].split(',')
   zipped = list(zip(exonstarts, exonends))
   chrom_len = len(chr_string)
   s = ''.join(bc[base.upper()] for base in chr_string[-starts-1:-ends-1] for starts, ends in zipped)+'\n'

然而,每次我这样做,我都会得到:

错误:未定义全局名称“开始”

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

尝试在上一个术语周围添加括号:

s = ''.join(bc[base.upper()] for base in (chr_string[-starts-1:-ends-1]\
                                         ^
            for starts, ends in zipped)) +'\n'
                                      ^

你在这里定义了两个不同的生成器。这相当于:

strands = (chr_string[-starts-1:-ends-1] for starts, ends in zipped)
complementary_strands = (bc[base.upper()] for base in stage_1)
joined_exons = ''.join(stage_2) + '\n'

答案 1 :(得分:2)

您似乎试图在生成器表达式中做太多。

两个for是错误的方法。你的意思是:

s = ''.join(bc[base.upper()] for starts,ends in zipped for base in chr_string[-starts-1:-ends-1])+'\n'

然后为第二个starts定义了endsfor

鉴于您今天提出的问题,我建议您阅读a good book,例如Dive Into Python 3,以便您自己解决这些问题。

答案 2 :(得分:1)

您正在定义外显子,然后引用未定义的开始。