回答編集履歴

6

ジェネレータ例追加

2019/12/28 06:32

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,27 @@
1
+ itertools.product同様にジェネレータにすればメモリ使用量は減ります。
2
+
3
+
4
+
5
+ ```
6
+
7
+ def bit_pattern(n):
8
+
9
+ for i in range(2**n):
10
+
11
+ yield [(i >> b) & 1 for b in range(n - 1, -1, -1)]
12
+
13
+
14
+
15
+ M = 10
16
+
17
+ for bit in bit_pattern(M):
18
+
19
+ print(bit)
20
+
21
+ ```
22
+
23
+
24
+
1
25
  処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
2
26
 
3
27
  itertool.product で処理した方が高速ですけど。
@@ -12,7 +36,7 @@
12
36
 
13
37
  >>> def to_array(b, n):
14
38
 
15
- ... return [(b >> (i - 1)) & 1 for i in range(n, 0, -1)]
39
+ ... return [(i >> b) & 1 for b in range(n - 1, -1, -1)]
16
40
 
17
41
  ...
18
42
 

5

例変更

2019/12/28 06:32

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -8,15 +8,15 @@
8
8
 
9
9
  >>> M = 10
10
10
 
11
- >>> pattern = range(2**M)
11
+ >>> pattern = range(1<<M)
12
12
 
13
- >>> formatter = f"{{:0{M}b}}".format
13
+ >>> def to_array(b, n):
14
14
 
15
- >>> print(formatter(pattern[5]))
15
+ ... return [(b >> (i - 1)) & 1 for i in range(n, 0, -1)]
16
16
 
17
- 0000000101
17
+ ...
18
18
 
19
- >>> print([*map(int, formatter(pattern[5]))])
19
+ >>> print(to_array(pattern[5], M))
20
20
 
21
21
  [0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
22
22
 

4

補足追加

2019/12/28 05:59

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,6 @@
1
1
  処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
2
+
3
+ itertool.product で処理した方が高速ですけど。
2
4
 
3
5
 
4
6
 

3

出力追加

2019/12/27 23:06

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -38,7 +38,11 @@
38
38
 
39
39
  0000000000
40
40
 
41
+ 0000000001
42
+
41
43
  ...
44
+
45
+ 1111111110
42
46
 
43
47
  1111111111
44
48
 

2

使用例追加

2019/12/27 23:01

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -19,3 +19,27 @@
19
19
  [0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ とか
26
+
27
+
28
+
29
+ ```
30
+
31
+ >>> M = 10
32
+
33
+ >>> for i in range(2**M):
34
+
35
+ ... print(f"{i:0{M}b}")
36
+
37
+ ...
38
+
39
+ 0000000000
40
+
41
+ ...
42
+
43
+ 1111111111
44
+
45
+ ```

1

別案

2019/12/27 23:00

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,4 @@
1
- バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
1
+ 処理内容によっては、バイナリのままrangeにしておいて、必要なときに2進配列化する手もあるのでは?
2
2
 
3
3
 
4
4