简单的python算法表现不尽如人意

时间:2018-03-17 20:48:28

标签: python

我有一个非常简单的算法,它意味着将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个元素。我很遗憾为什么会发生这种情况,因为它是一个如此简单的算法。

1 个答案:

答案 0 :(得分:3)

问题在于这一行:

acd = [[]] * len(bounds)

acd将包含len(bounds)次相同的空列表。 你需要它们是不同的列表。

acd = [[] for _ in range(len(bounds))]

[x] * n快捷方式仅适用于您需要同一x的多个副本的情况。