0

이름과 숫자의 텍스트 파일을 읽고 그것을 이름과 숫자를 가진 2 차원 배열로 만든 다음 배열에서 항목을 제거하려고합니다. 번호는 1입니다. 그러나 2 차원 배열의 인덱스에 액세스하기 위해 작성한 코드는 작동하지 않고 "IndexError : list index of range"오류를 발생시킵니다. 이리스트 2의 모양에 대한 예제파이썬 다차원 배열리스트 인덱스가 범위를 벗어났습니다

File "/Users/cat/PycharmProjects/myCS106/Names.py", line 16, in updateNames 
list2[i][1] = int(list2[i][1]) 
IndexError: list index out of range 

입니다 : 이것은 역 추적입니다

for i in range(x): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

:이 작동하지 않는 코드의 블록

[["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

은 무엇 내가 잘못했는데 어떻게 배열의 항목 중 두 번째 부분 (이 경우 숫자)에 올바르게 액세스합니까? 경우

+1

반복하는 동안 목록 길이를 변경합니다. 대개 항상 문제가 발생합니다. 그럴 필요가있는 논리적 인 이유가 있습니까? – Luca

+0

list comprehension은'pop()'없이'1' 값을 제거하는 명확한 방법 일 수 있습니다 : 'list_without_ones = [element2 [1]! = 1]이면 list2에있는 요소에 대해 요소에 대해 ''. 즉, 원하지 않는 값을 걸러내는'list2'의 복사본을 만듭니다 –

답변

0

당신은 당신이 IndexError을 유발하지 않고 항목을 제거 할 수 있습니다 것입니다 당신이 끝에서 처음으로 그것을 반복 할 수있는 목록에서 일부 요소를 제거하려면 :

list2 = [["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]] 

for i in range(len(list2) - 1, -1, -1): 
    list2[i][1] = int(list2[i][1]) 
    if int(list2[i][1]) == 1: 
     list2.pop(i) 

print(list2) 

출력 :

[['Jane Smith', 0]] 

물론 list comprehension을 사용하여 새 목록을 만들 수 있습니다.

list2 = [[x[0], int(x[1])] for x in list2 if int(x[1]) != 1] 
관련 문제