如何在 Python 2.7 中执行嵌套循环

How to do Nested loops in Python 2.7

我正在尝试使用嵌套 for 循环遍历二维数组,当我绘制它时它具有不同的值,但是当我尝试访问数据时,它的元素都是相同的。我尝试了不同风格的 for 循环,但得到了相同的错误。我不明白这是来自 Java.

的错误
predicted_values = 2*[2*[0]] #  number of lines *[ number of data points *[0]]

for row in predicted_values:

    #last given price
    row[0] = adj_close[len(adj_close)-1] 

    for index in xrange(1,len(row)):

        random_float_0_1 = random.random()
        drift = meanPDR -variance/2
        random_offset = standard_deviation*norm.ppf(random_float_0_1)
        t = drift + random_offset
        predicted_stock_price = row[index-1]*math.exp(t)
        row[index] = predicted_stock_price
        print predicted_values

    plt.plot(range(0,len(row)),row)

这输出

[[152.186905, 149.88609120889242], [152.186905, 149.88609120889242]]
[[152.186905, 151.0754945683822], [152.186905, 151.0754945683822]]

当我想要它输出时

[[152.186905, 149.88609120889242], [152.186905, 0]]
[[152.186905, 149.88609120889242], [152.186905, 151.0754945683822]]

覆盖了它不应该访问的以前的数据发生了什么。

问题不在于循环:问题在于您没有意识到 Python 列表简写的语义。这是您的嵌套列表,名称较短且进行了简单更改:

>>> pv = 2*[2*[0]]
>>> pv
[[0, 0], [0, 0]]
>>> pv[0][1] = "new"
>>> pv
[[0, 'new'], [0, 'new']]

问题是您没有创建四个独立的元素:您对 相同 2 元素列表进行了两次引用。

这是矫枉过正的版本:

>>> pv = [[0 for col in range(2)] for row in range(2)]
>>> pv
[[0, 0], [0, 0]]
>>> pv[0][1] = "new"
>>> pv
[[0, 'new'], [0, 0]]
>>> pv[1][0] = "abc"
>>> pv
[[0, 'new'], ['abc', 0]]

这让你感动吗?

请记住 Python 中的变量是 所有 间接的:对值的引用。