我觉得我在做一些非常愚蠢的事情。也许我太累了。
我正在尝试制作一个大小取决于“count”的真值表 - 表的变量数。
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']]
答案 0 :(得分:1)
将第一行更改为:
table = [[None] * int(pow(2, count)) for _ in range(count) ]
正如您毫无疑问地注意到的那样,在第一个版本中,每一行都共享对同一列表的引用,而在这个新版本中,我们为每一行创建一个新列表。
答案 1 :(得分:1)
由于* count
,它在所有行中回显。您实际上存储了对最初创建的数据count
次的引用。 mgilson 对此有所解决。