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']]

您可以看到我在一次迭代中设置的任何内容都在所有“行”中回显。谁能告诉我这里有什么问题?

我当然期待这个:

[['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 回答