回答編集履歴

1

d

2019/08/09 08:15

投稿

tiitoi
tiitoi

スコア21956

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
+ ```