关于python:转到字符串中的某个位置

Going to a certain position in a string

我想得到一根弦上的某一点,它与我所得到的弦(从负方向)相反。

AAAAAAAA CCCCCCCC TTTTTTTTTTTTTTGGGGGGG公司tttttttttt ggggggggg aaaaaaaaaaaa cccccccc公司

所以你需要转换坐标。在底部钢绞线上,底部0(最右侧C)与顶部钢绞线上的底部39相对。基1与基38相对。基2与判例37相反。(重要的一点:注意每次加上这两个数字会发生什么。)所以基数10对应基数29,基数19对应基数20。

所以:如果我想在底链上找到基10-20,我可以看看顶部的基20-29(然后反向补码)。

我写了以下内容:

1
2
3
4
5
6
7
8
9
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)+'
'

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

错误:未定义全局名称"starts"

我该怎么解决这个问题??


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

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

                                      ^

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

1
2
3
4
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) + '
'


看起来您在生成器表达式中做了太多的工作。

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

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

然后为第二个for定义startsends

考虑到您今天提出的问题,我建议您阅读一本好书,例如深入了解python 3,这样您就可以自己解决这些问题。


您定义了exinstarts,然后引用了starts,这是未定义的。