回答編集履歴

2 追記

hayataka2049

hayataka2049 score 29838

2019/03/27 18:57  投稿

4^5で1024個になるので膨大すぎて埋もれているだけで、ちゃんと結果は出ているかと。
```python
import itertools
five_base=list(itertools.product('atgc',repeat=5))
new=[]##新しいリストの作成 必ずfor loopの前!!
for x in five_base:
   y=''.join(x)##間の','の削除
   new.append(y)##リストに順番に並びを格納
def find_five_base(data):
   for x in new : ##xにnewを格納
       cnt = data.count(x)
       if cnt > 0:
           print(x, cnt)
       
find_five_base("atgctacgta")
""" =>
atgct 1
acgta 1
tacgt 1
tgcta 1
gctac 1
ctacg 1
"""
```
なお、ある程度長いものになるとそのアルゴリズムで探すのは遅すぎて現実的ではないはずです(あ、でも一応O(N)ではあるか)。一文字ずつ見る範囲をずらしながらカウントしていった方が効率的でしょう。
なお、ある程度長いものになるとそのアルゴリズムで探すのは遅すぎて現実的ではないはずです(あ、でも一応O(N)ではあるか。1024回ループされるのが非効率というだけで)。一文字ずつ見る範囲をずらしながらカウントしていった方が効率的でしょう。
1 追記

hayataka2049

hayataka2049 score 29838

2019/03/27 18:46  投稿

4^5で1024個になるので膨大すぎて埋もれているだけで、ちゃんと結果は出ているかと。
```python
import itertools
five_base=list(itertools.product('atgc',repeat=5))
new=[]##新しいリストの作成 必ずfor loopの前!!
for x in five_base:
   y=''.join(x)##間の','の削除
   new.append(y)##リストに順番に並びを格納
def find_five_base(data):
   for x in new : ##xにnewを格納
       cnt = data.count(x)
       if cnt > 0:
           print(x, cnt)
       
find_five_base("atgctacgta")
""" =>
atgct 1
acgta 1
tacgt 1
tgcta 1
gctac 1
ctacg 1
"""
```
なお、ある程度長いものになるとそのアルゴリズムで探すのは現実的ではないはずです
なお、ある程度長いものになるとそのアルゴリズムで探すのは遅すぎて現実的ではないはずです(あ、でも一応O(N)ではあるか)。一文字ずつ見る範囲をずらしながらカウントしていった方が効率的でしょう

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る