回答編集履歴
1
d
test
CHANGED
@@ -35,3 +35,51 @@
|
|
35
35
|
# 17.8 s
|
36
36
|
|
37
37
|
```
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
## 追記
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
後半でやっていることは、行と列を入れ替える、つまり、転置をとってるということですよね。
|
46
|
+
|
47
|
+
そうであれば、前半で一旦結合しないで、そのまま `list(gen)` で (14244300, 21) の2次元のリストにして、転置して (21, 14244300) の2次元配列にすればいいと思います。
|
48
|
+
|
49
|
+
必要であれば、そのあと join() で文字列にしてください。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
```python
|
54
|
+
|
55
|
+
import numpy as np
|
56
|
+
|
57
|
+
import more_itertools
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
amino_acid = "L" * 4 + "A" * 4 + "-" * 13
|
62
|
+
|
63
|
+
gen = more_itertools.distinct_permutations(amino_acid)
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
# 全パターン生成する。
|
68
|
+
|
69
|
+
patterns = np.array(list(gen))
|
70
|
+
|
71
|
+
print(len(patterns)) # 14244300
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
# 転置をとる。
|
76
|
+
|
77
|
+
trans = patterns.T
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
# 文字列にしたい場合は結合する。
|
82
|
+
|
83
|
+
ret = ["".join(x) for x in trans]
|
84
|
+
|
85
|
+
```
|