回答編集履歴
8
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -21,7 +21,7 @@ | |
| 21 21 | 
             
            ### 追記
         | 
| 22 22 |  | 
| 23 23 | 
             
            1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
         | 
| 24 | 
            -
            - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
         | 
| 24 | 
            +
            - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。ただし、 `[1, 1, 1, 1]` が与えられたときは、リストの長さは変更されず、 `[0, 0, 0, 0]` にして返します。
         | 
| 25 25 |  | 
| 26 26 | 
             
            このような `increment` は一例として再帰を使って以下のように書けます。(再帰を使わなくても書けるでしょう)
         | 
| 27 27 |  | 
7
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -20,9 +20,11 @@ | |
| 20 20 |  | 
| 21 21 | 
             
            ### 追記
         | 
| 22 22 |  | 
| 23 | 
            -
            リストを引数に取る、次のような関数`increment`を考えます。
         | 
| 23 | 
            +
            1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
         | 
| 24 | 
            -
            たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。 | 
| 24 | 
            +
            - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
         | 
| 25 25 |  | 
| 26 | 
            +
            このような `increment` は一例として再帰を使って以下のように書けます。(再帰を使わなくても書けるでしょう)
         | 
| 27 | 
            +
             | 
| 26 28 | 
             
            ```python3
         | 
| 27 29 | 
             
            def increment(lis, length=None):
         | 
| 28 30 | 
             
                if length is None:
         | 
6
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -20,7 +20,8 @@ | |
| 20 20 |  | 
| 21 21 | 
             
            ### 追記
         | 
| 22 22 |  | 
| 23 | 
            -
             | 
| 23 | 
            +
            リストを引数に取る、次のような関数`increment`を考えます。
         | 
| 24 | 
            +
            たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として再帰を使って以下のように書けます。
         | 
| 24 25 |  | 
| 25 26 | 
             
            ```python3
         | 
| 26 27 | 
             
            def increment(lis, length=None):
         | 
5
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -16,7 +16,7 @@ | |
| 16 16 |  | 
| 17 17 | 
             
            参考になれば幸いです。
         | 
| 18 18 |  | 
| 19 | 
            -
            __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、 | 
| 19 | 
            +
            __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、別の方法を下記に追記しました。)__
         | 
| 20 20 |  | 
| 21 21 | 
             
            ### 追記
         | 
| 22 22 |  | 
4
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -16,7 +16,7 @@ | |
| 16 16 |  | 
| 17 17 | 
             
            参考になれば幸いです。
         | 
| 18 18 |  | 
| 19 | 
            -
            __(※ | 
| 19 | 
            +
            __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
         | 
| 20 20 |  | 
| 21 21 | 
             
            ### 追記
         | 
| 22 22 |  | 
3
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -16,10 +16,10 @@ | |
| 16 16 |  | 
| 17 17 | 
             
            参考になれば幸いです。
         | 
| 18 18 |  | 
| 19 | 
            +
            __(※上記のビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
         | 
| 20 | 
            +
             | 
| 19 21 | 
             
            ### 追記
         | 
| 20 22 |  | 
| 21 | 
            -
            別の方法を挙げます。
         | 
| 22 | 
            -
             | 
| 23 23 | 
             
            まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
         | 
| 24 24 |  | 
| 25 25 | 
             
            ```python3
         | 
2
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -20,7 +20,7 @@ | |
| 20 20 |  | 
| 21 21 | 
             
            別の方法を挙げます。
         | 
| 22 22 |  | 
| 23 | 
            -
            まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 | 
| 23 | 
            +
            まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
         | 
| 24 24 |  | 
| 25 25 | 
             
            ```python3
         | 
| 26 26 | 
             
            def increment(lis, length=None):
         | 
1
テキスト修正
    
        answer	
    CHANGED
    
    | @@ -14,4 +14,35 @@ | |
| 14 14 | 
             
            ```
         | 
| 15 15 | 
             
            - **動作確認用 Replt.it:** [https://repl.it/@jun68ykt/Q232173](https://repl.it/@jun68ykt/Q232173)
         | 
| 16 16 |  | 
| 17 | 
            -
            参考になれば幸いです。
         | 
| 17 | 
            +
            参考になれば幸いです。
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ### 追記
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            別の方法を挙げます。
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、この `a` を2進数の計算で1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ```python3
         | 
| 26 | 
            +
            def increment(lis, length=None):
         | 
| 27 | 
            +
                if length is None:
         | 
| 28 | 
            +
                    length = len(lis)
         | 
| 29 | 
            +
                if length == 0:
         | 
| 30 | 
            +
                    return
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                if lis[length-1]:
         | 
| 33 | 
            +
                    lis[length-1] = 0
         | 
| 34 | 
            +
                    increment(lis, length-1)
         | 
| 35 | 
            +
                else:
         | 
| 36 | 
            +
                    lis[length-1] = 1
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                return lis
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            ```
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            上記の `increment`を使うと、ご質問の `arrays` は、以下で得られます。
         | 
| 43 | 
            +
            ```python3
         | 
| 44 | 
            +
            M = 10
         | 
| 45 | 
            +
            a = [1] * M
         | 
| 46 | 
            +
            arrays = [increment(a).copy() for _ in range(2 ** M)]
         | 
| 47 | 
            +
            ```
         | 
| 48 | 
            +
            - **動作確認用 Replt.it:** [https://repl.it/@jun68ykt/Q232173-2](https://repl.it/@jun68ykt/Q232173-2)
         | 
