-1

중첩 for 루프를 사용하여 2 차원 배열을 탐색하려고하는데 그래프를 그릴 때 값이 다르지만 데이터에 액세스하려고하면 요소가 모두 같은. for 회 돌이에 대해 다른 스타일을 시도했지만 동일한 오류가 발생합니다. 이것은 내가 Java에서 오는 것을 이해하지 못하는 오류입니다. 나는 그것이에 액세스 할 수 있어야 이전 데이터를 덮어 무슨 일이 있었는지 출력How do to Python 2.7에서 중첩 된 루프

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

로 할 때

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]] 

출력합니다.

답변

1

문제는 루프가 아닙니다. 파이썬 목록의 의미를 알지 못한다는 것입니다. 당신은 같은이 요소 목록에 두 개의 참조를 만든 :

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

문제는 네 개의 독립적 인 요소를하지 않은 것입니다 : 여기에 짧은 이름과 간단한 변경하여 중첩 된 목록입니다.

>>> 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]] 

합니까 당신이 이동 얻을 :

여기에 과잉 버전입니까?

파이썬의 변수는 모두 입니다. indirect : 값에 대한 참조입니다.

+0

이렇게하면 파이썬에서 2 차원 배열을 초기화해야합니까? 나는 이것이 이상하게 보일 정도로 자바에서왔다. – KenBone

+0

Nope; 이 "중복"폐쇄에서 언급 된 질문 아래의 해답을보십시오. 나는'ImportanceOfBeingErnest'가 나를 때 렸을 때 그것을 찾고있었습니다. – Prune