我有一个非常简单的算法,它意味着将48个数字排序到具有特定范围的桶中。例如,如果我的范围是[0, 16), [16, 32), [32, 48)
,我将有3个桶,每个桶有16个整数。
ds = range(0, 48)
bounds = [[0, 16], [16, 32], [32, 48]]
acd = [[]] * len(bounds)
for d in ds:
for i in range(0, len(bounds)):
if bounds[i][0] <= d < bounds[i][1]:
print("Adding %s to %s" % (d, i))
acd[i] += [d]
print语句按预期工作,例如它将打印“添加47到2”
但是,应该包含存储桶的数组acd
在所有3个存储桶中都包含所有48个元素。我很遗憾为什么会发生这种情况,因为它是一个如此简单的算法。
答案 0 :(得分:3)
问题在于这一行:
acd = [[]] * len(bounds)
acd
将包含len(bounds)
次相同的空列表。
你需要它们是不同的列表。
acd = [[] for _ in range(len(bounds))]
[x] * n
快捷方式仅适用于您需要同一x
的多个副本的情况。