2017-03-21 5 views

答えて

4

簡単な方法は、それぞれ「X」の文字の最初の分割になり、その後、空の結果フィルタリングします:ここで

sequences = filter(None, my_sequence.split("x")) 
、唯一truthy値を維持する手段をフィルタリングする None引数を - 空文字列は falseと扱われ、結果から削除されます。

注:イテレータを返すfilterのPython 3では、あなたがリスト、使用したい場合:たとえば

sequences = list(filter(None, my_sequence.split("x"))) 

In [5]: filter(str, my_sequence.split("x")) 
Out[5]: 
['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 

別の解決策は、正規表現を使用することですが。シーケンスの間に可変量の "x"文字がある場合は、x+パターンで分割できます。パターンは、1つ以上のxの行に一致します。例えば

In [6]: import re 
In [7]: p = re.compile(r'x+') 
In [8]: p.split(my_sequence) 
Out[8]: 
['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 
+2

あなたはそれをPython 3ユーザーの' list'にキャストできますか? –

+0

@ Ev.Kounis完了 - 提案に感謝します! –

2

あなたは正規表現を使用することができXSの各シーケンスのための単一のエントリを持つようにしたい場合:ここで

import re 
x = 'atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcactxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaaxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtcc 
agacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc' 
re.split(r'x+', x) 
>['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 

r'x+'は、私が上の元の文字列を分割することを意味1つまたは複数のxのシーケンス。

1

希望の出力を得る別の方法はlist comprehensionです。

これは一例です:

# Or maybe a generator 
# data = (k for k in my_sequence.split("x") if k) 
data = [k for k in my_sequence.split("x") if k] 

for k,v in enumerate(data): 
    print("{0} >>> {1}".format(k,v)) 

出力:

0 >>> atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact 
1 >>> cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa 
2 >>> ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc 
関連する問題