如何在Python中嵌套循环2.7
问题描述:
我想遍历一个嵌套for循环的2d数组,当我绘制它时有不同的值,但是当我尝试访问数据时,它的元素都是相同。我已经尝试了不同风格的循环,但得到相同的错误。这更多的是我不明白来自Java的错误。如何在Python中嵌套循环2.7
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, 0]]
[[152.186905, 149.88609120889242], [152.186905, 151.0754945683822]]
发生了什么事,以覆盖其不应该访问到以前的数据它输出
[[152.186905, 149.88609120889242], [152.186905, 149.88609120889242]]
[[152.186905, 151.0754945683822], [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中的变量是全部 indirect:对值的引用。
这是我应该如何初始化Python中的任何2D数组?我来自java,所以这看起来很奇怪。 – KenBone
没有;请参阅“重复”关闭此问题中引用的问题下的答案。当'ImportanceOfBeingErnest'击败我时,我正在寻找它。 – Prune