0

与えられたものとは反対の(負の側から)弦の特定のポイントに到達したいと思います。

AAAAAAAAAACCCCCCCCCCTTTTTTTTTTGGGGGGGGGG TTTTTTTTTTGGGGGGGGGGAAAAAAAAAACCCCCCCCCC

したがって、座標を変換する必要があります。下のストランドでは、ベース0(右端のC)が上のストランドのベース39と反対になっています。基数1は基数38に対してです。基数2はケース37に対してです。(重要なポイント:これら2つの数値を合計すると、毎回何が起こるかに注意してください。)したがって、基数10は基数29に対して、基数19は基数20に対してです。

つまり、下部のストランドでベース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'

それでも、これを行うたびに、次のようになります。

エラー:グローバル名'starts'が定義されていません

これを修正するにはどうすればよいですか?

4

3 に答える 3

3

最後の用語の前後に括弧を追加してみてください。

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

ここで2つの異なるジェネレーターを定義します。これは次と同等です。

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'
于 2012-04-28T02:44:01.980 に答える
2

ジェネレータ式でやりすぎているようです。

2つforは間違った方法です。もしかして:

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

次にstarts、とendsは2番目に定義されforます。

あなたが今日尋ねた質問を考えると、これらの問題を自分で解決できるように、 Dive IntoPython3などの良い本を読むことをお勧めします。

于 2012-04-28T02:40:19.720 に答える
1

exonstartsを定義してから、定義されていないstartsを参照しています。

于 2012-04-28T02:10:13.823 に答える