如何在 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 中的变量是 所有 间接的:对值的引用。
我正在尝试使用嵌套 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 中的变量是 所有 间接的:对值的引用。