【问题标题】:How to do Nested loops in Python 2.7 [duplicate]如何在 Python 2.7 中执行嵌套循环 [重复]
【发布时间】:2017-05-18 22:17:32
【问题描述】:

我正在尝试使用嵌套的 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 loops matplotlib multidimensional-array nested-loops


    【解决方案1】:

    问题不在于循环:在于您没有意识到 Python 速记列表的语义。这是您的嵌套列表,名称更短,更改也很简单:

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

    问题在于您没有创建四个独立的元素:您对 same 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 中的变量都是间接的:对值的引用。

    【讨论】:

    • 这是我应该如何在 python 中初始化任何二维数组的方式吗?我来自 java,所以这看起来很奇怪。
    • 不;请参阅此问题的“重复”关闭中引用的问题下的答案。当ImportanceOfBeingErnest 击败我时,我正在寻找它。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多