我想在一个字符串上找到一个特定的点(从消极的一面)到我给出的字符串。
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'
然而,每次我这样做,我都会得到:
错误:未定义全局名称“开始”
我该如何解决这个问题?
答案 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
定义了ends
和for
。
鉴于您今天提出的问题,我建议您阅读a good book,例如Dive Into Python 3,以便您自己解决这些问题。
答案 2 :(得分:1)
您正在定义外显子,然后引用未定义的开始。