0

私はここで非常に馬鹿げたことをしているような気がします。多分私はあまりにも疲れています。

「カウント」(テーブルの変数の数)に応じたサイズの真理値表を作成しようとしています。

    table = [[None] * int(pow(2, count))] * count
    in_a_row = pow(2, count) / 2
    iterator = 0
    for i in range(count):
        for j in range(int(pow(2, count))):
            print(str(i) + ' ' + str(j), end = '')
            if iterator < in_a_row:
                table[i][j] = 'T'
                print(' T')
            elif iterator == 2 * in_a_row:
                table[i][j] = 'T'
                iterator = 0
                print(' T')
            else:
                table[i][j] = 'F'
                print(' F')
            iterator += 1

        print(table)
        in_a_row /= 2
        iterator = 0

これを出力します:

0 0 T
0 1 T
0 2 F
0 3 F
[['T', 'T', 'F', 'F'], ['T', 'T', 'F', 'F']]
1 0 T
1 1 F
1 2 T
1 3 F
[['T', 'F', 'T', 'F'], ['T', 'F', 'T', 'F']]

1回の反復で設定したものが、すべての「行」にエコーされることがわかります。誰かがここで何が悪いのか教えてもらえますか?

もちろん私はこれを期待しています:

[['T', 'T', 'F', 'F'], ['T', 'F', 'T', 'F']]
4

2 に答える 2

1

最初の行を次のように変更します。

table = [[None] * int(pow(2, count)) for _ in range(count) ]

お気づきのことと思いますが、最初のバージョンでは、各行が同じリストへの参照を共有していますが、この新しいバージョンでは、各行に新しいリストを作成します。

于 2012-09-06T00:31:36.757 に答える
1

のため、すべての行にエコーしています* count。基本的に、最初に作成されたデータcount時間への参照を保存しています。mgilsonにはこれに対する修正があります。

于 2012-09-06T00:34:27.020 に答える