2017-09-04 14 views
0

リストにある単語の文字の位置を取得しようとしています。 kは、"ATCGCATCG"の部分を3つの部分に含むリストです。"ATC", "GCA" and "TCG".としたいのは、最初と最後の位置を再調整することです。この場合、ATCは、Aが最初であり、Cが3番目であるので、1 and 3を持つ必要があります。したがって、GCAの場合は、46,のようになります。文字列内にある部分文字列の位置を取得する

ので、出力は次のようになります。

PART1 ATC 1 3 
PART2 GCA 4 6 
PART3 TCG 7 9 

をしかし、私は取得することができる午前何をされています。この出力を生成するコードがある

PART1 ATC 0 0 
PART2 GCA 1 2 
PART3 TCG 2 4 

def separate(string,n): 
    k = [string[i:i+n] for i in range(0, len(string),n)] 
    yield k 
    i=1 
    for element in k: 
        print 'PART' + str(i) + '\t' + element + '\t' + str(int(k.index(element))) + str(int((k.index(element)) + int(k.index(element)))) 
        i=i+1 


for it in list((separate("ATCGCATCG", n =3))): 
     print it 

あなたに私にオプションを見せていただければ幸いです。

ありがとうございます!

+0

ここで何を探していますか? –

+0

私はもっときれいに編集しました – bapors

+0

あなたの収穫後にあなたの関数の中にループは必要ありません。それは全く読むことができません。 –

答えて

1
def separate(string,n): 
    k = [string[i:i+n] for i in range(0, len(string),n)] 
    current = string 
    start = 0 
    end = 0 
    for i, element in enumerate(k): 
     start = end + current.index(element) + 1 
     end = start + len(element) - 1 
     current = string[end:] 
     print("PART{i}\t{el}\t{s} {e}".format(i=i, el=element, s=start, e=end)) 

separate("ATCGCATCG", n=3) 

出力:

PART0 ATC 1 3 
PART1 GCA 4 6 
PART2 TCG 7 9 
1

各部分の文字列が固定長を有しているので、私はあなたがこれを試すことができると思います。

def separate(string,n): 
    k = [string[i:i+n] for i in range(0, len(string),n)] 
    yield k 
    for curr_index in range(len(k)): 
     element = k[curr_index] 
     curr = curr_index * n + 1 
     print ('PART' + str(curr_index + 1) + '\t' + element + '\t' + str(curr) + str(curr + n - 1)) 

for it in list((separate("ATCGCATCG", n =3))): 
     print (it) 

これは、ある要素のcurr_indexを取ります現在、forループで繰り返し処理され、元のテキスト内の文字列の位置を計算するために使用されます。これがうまくいきたいです

2

IIUC、私はあなたがものをオーバーコンプリートしていると思います。文字列をループで作成して生成するだけです。

def foo(string, n): 
    c = 1 
    for i in range(0, len(string), n): 
     yield '\t'.join(['PART{}'.format(c), string[i : i + n], str(i + 1), str(i + n)]) 
     c += 1 

for i in foo("ATCGCATCG", 3): 
    print(i) 

PART1 ATC 1 3 
PART2 GCA 4 6 
PART3 TCG 7 9 
関連する問題