2014-05-23 1 views
1

파이썬 2D리스트를 만들고 싶지만 프로그램을 작성하는 동안리스트가 초기화되어야하는 ecaxt 치수를 알지 못합니다. 예를 들어 나는이정확한 치수를 알지 못해서 파이썬에서 2D리스트를 초기화하는 중

edgelist = [[3,5], [2,5], [4,6], ...] 

내부 목록과 같은 목록이 두 숫자를해야합니다합니다. 그러나 내부 목록의 수는 코딩하는 동안 알려지지 않습니다. 루프를 통해 초기화 한 후에 숫자가 지정됩니다.

내 코드는 다음과 같습니다

edgelist = [] 
val = 0 
for every_list in req_data: 
for temp in range(1,len(every_list)): 
    edgelist[val].append(every_list[0]) 
    edgelist[val].append(every_list[temp]) 
    val = val+1 

목록을 val == 0 값을 추가합니다. 그러나 다음 반복은 그것은 edgelist 빈 목록을 의미

답변

3
edgelist = [] 

... IndexError: list index out of range 같은 오류를 보여줍니다. 따라서 edgelist[0]은 아무 것도 얻을 수 없습니다. 그래서 그 오류를 던지고있다. 당신이해야 할 것은

edgelist.append([every_list[0], every_list[temp]]) 

이것은 every_list[0]every_list[temp]와 두 개의 요소 목록을 작성하고 edgelist에 그 목록을 추가 할 것입니다. 따라서 edgelist은 목록 또는 2 차원 목록이됩니다. req_data 이미 두 요소 목록이있는 경우

또한, 당신은 단순히 req_data의 요소의 복사본을 생성하고 edgelist에 바로 추가됩니다

for every_list in req_data: 
    edgelist.append(every_list[:]) 

이 작업을 수행 할 수 있습니다. 이 목록 작성법을 사용하는 것이 더 좋습니다.

edgelist = [every_list[:] for every_list in req_data] 
+0

브릴리언트. 고마워. 나는 다른 방법으로 초기화하면 목록과 상점 번호를 색인 할 수 있다고 생각했습니다. 고맙습니다. 이것은 적절하다. :) –

+0

@Abinaya 글쎄, 왜 언젠가 내부 루프를 사용하는지 이해하는 데 시간이 걸렸습니다. 'req_data'에있는 목록을'edgelist'에 복사하려고하십니까? – thefourtheye

+0

예. req_data는 원시 데이터를 가지고 있으며 나머지 프로그램에 대해 필요한만큼 가장자리 목록에 복사하려고합니다. –

관련 문제