回答編集履歴
6
ジェネレータ例追加
answer
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
itertools.product同様にジェネレータにすればメモリ使用量は減ります。
|
2
|
+
|
3
|
+
```
|
4
|
+
def bit_pattern(n):
|
5
|
+
for i in range(2**n):
|
6
|
+
yield [(i >> b) & 1 for b in range(n - 1, -1, -1)]
|
7
|
+
|
8
|
+
M = 10
|
9
|
+
for bit in bit_pattern(M):
|
10
|
+
print(bit)
|
11
|
+
```
|
12
|
+
|
1
13
|
処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
|
2
14
|
itertool.product で処理した方が高速ですけど。
|
3
15
|
|
@@ -5,7 +17,7 @@
|
|
5
17
|
>>> M = 10
|
6
18
|
>>> pattern = range(1<<M)
|
7
19
|
>>> def to_array(b, n):
|
8
|
-
... return [(
|
20
|
+
... return [(i >> b) & 1 for b in range(n - 1, -1, -1)]
|
9
21
|
...
|
10
22
|
>>> print(to_array(pattern[5], M))
|
11
23
|
[0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
|
5
例変更
answer
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
|
4
4
|
```
|
5
5
|
>>> M = 10
|
6
|
-
>>> pattern = range(
|
6
|
+
>>> pattern = range(1<<M)
|
7
|
-
>>>
|
7
|
+
>>> def to_array(b, n):
|
8
|
+
... return [(b >> (i - 1)) & 1 for i in range(n, 0, -1)]
|
9
|
+
...
|
8
|
-
>>> print(
|
10
|
+
>>> print(to_array(pattern[5], M))
|
9
|
-
0000000101
|
10
|
-
>>> print([*map(int, formatter(pattern[5]))])
|
11
11
|
[0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
|
12
12
|
```
|
13
13
|
|
4
補足追加
answer
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
|
2
|
+
itertool.product で処理した方が高速ですけど。
|
2
3
|
|
3
4
|
```
|
4
5
|
>>> M = 10
|
3
出力追加
answer
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
... print(f"{i:0{M}b}")
|
19
19
|
...
|
20
20
|
0000000000
|
21
|
+
0000000001
|
21
22
|
...
|
23
|
+
1111111110
|
22
24
|
1111111111
|
23
25
|
```
|
2
使用例追加
answer
CHANGED
@@ -8,4 +8,16 @@
|
|
8
8
|
0000000101
|
9
9
|
>>> print([*map(int, formatter(pattern[5]))])
|
10
10
|
[0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
|
11
|
+
```
|
12
|
+
|
13
|
+
とか
|
14
|
+
|
15
|
+
```
|
16
|
+
>>> M = 10
|
17
|
+
>>> for i in range(2**M):
|
18
|
+
... print(f"{i:0{M}b}")
|
19
|
+
...
|
20
|
+
0000000000
|
21
|
+
...
|
22
|
+
1111111111
|
11
23
|
```
|
1
別案
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
|
1
|
+
処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
|
2
2
|
|
3
3
|
```
|
4
4
|
>>> M = 10
|