2017-10-07 16 views
0

여기 프로그래밍 전반에 대한 초보자는 없습니다. 번호가없는 빈 사전이 있습니다 (이 경우 3이 아닌 경우). 루프 내에서 사전에 추가 될 목록의 목록을 생성하려고하지만 각 루프에서 다른 키를 덮어 쓰고 있습니다.for 루프에서 빈 사전에 목록을 추가하려고 시도했지만 모든 반복에서 항목이 완전히 덮어 쓰여지고 있습니다.

상황에 대한
{0: [[57, 58], [66, 67]], 1: {}, 2: {}} 
{0: [[33, 34], [42, 43]], 1: [[33, 34], [42, 43]], 2: {}} 
{0: [[29, 30], [38, 39]], 1: [[29, 30], [38, 39]], 2: [[29, 30], [38, 39]]} 

는, 이것이 내에서 동일한 섬유 요소의 임의의 유통과 ABAQUS 메쉬 파일을 생성하는 것입니다 : 이것은 내가 진행을 체크 출력

#generating dictionary for all fibres with number n 
fibre = {i : {}for i in range(no)} 
#generating empty fibre of size n_f 
fibre_e = [[[] for i in range(n_f)] for j in range(n_f)] 
rand_r = [[] for a in range(no)] 
rand_c = [[] for a in range(no)] 

#generating fibre element from random corner elements 
for a in range(no): 
    # choosing a random corner element 
    fibre[a] = fibre_e 
    rand_r[a] = randrange(len(all_e)) 
    rand_c[a] = randrange(len(all_e)) 

    for i in range(n_f): 
     e1_fibre=all_e[rand_r[a]][rand_c[a]] 
     #move to upper row 
     rand_r[a] += 1 
     for j in range(n_f): 
      fibre_e[i][j] = e1_fibre 
      e1_fibre += 1 

    print(fibre) 

아래 내 시도를 참조하십시오 매트릭스.

편집 : 컨텍스트 사용 copy.deepcopy 근무


for a in range(no): 
    # choosing a random corner element 

    rand_r[a] = randrange(len(all_e)) 
    rand_c[a] = randrange(len(all_e)) 

    for i in range(n_f): 
     e1_fibre=all_e[rand_r[a]][rand_c[a]] 
     #move to upper row 
     rand_r[a] += 1 
     for j in range(n_f): 
      fibre_e[i][j] = e1_fibre 
      e1_fibre += 1 
      fibre[a] = copy.deepcopy(fibre_e) 

    print(fibre) 

출력 :

귀하의 경우 특히
{0: [[68, 69], [77, 78]], 1: {}, 2: {}} 
{0: [[68, 69], [77, 78]], 1: [[6, 7], [15, 16]], 2: {}} 
{0: [[68, 69], [77, 78]], 1: [[6, 7], [15, 16]], 2: [[28, 29], [37, 38]]} 
+1

https://stackoverflow.com/q/2612802/8586227 –

+0

감사합니다. copy.deepcopy는 나를 위해 일했다. – Aedan

답변

1

, 당신이 지정하고있는 표현를 할당 fibre_e ~ fibre[a] 대신. 그런 다음 각 반복마다 새 목록이 만들어집니다. 변수 fibre_e을 전혀 필요로하지 않습니다.