목록이 있습니다.
list1=[]
목록의 길이가 결정되지 않았으므로 다음과 같이 list1 끝에 개체를 추가하려고합니다.
for i in range(0, n):
list1=list1.append([i])
하지만 내 출력은 다음 오류를 계속 표시합니다. AttributeError : ‘NoneType’object has no attribute ‘append’
list1이 빈 목록으로 시작하기 때문입니까? 이 오류를 어떻게 수정합니까?
답변
append
실제로 목록을 변경 합니다. 또한 목록이 아닌 항목을 사용 합니다. 따라서 필요한 것은
for i in range(n):
list1.append(i)
(참고 range(n)
로이 경우를 사용할 수 있습니다 .)
실제 사용이 더 복잡하다고 가정하지만 목록 이해력을 사용할 수 있으며 이는 이에 대해 더 비단뱀 적입니다.
list1 = [i for i in range(n)]
또는이 경우 Python 2.x range(n)
에서는 실제로 원하는 목록을 생성하지만 Python 3.x에서는 list(range(n))
.
답변
할당 연산자가 필요하지 않습니다. append는 None을 반환합니다.
답변
append
None을 반환하므로 두 번째 반복 append
에서 NoneType의 메서드 를 호출 합니다. 할당을 제거하기 만하면됩니다.
for i in range(0, n):
list1.append([i])
답변
Mikola는 정답이 있지만 조금 더 설명합니다. 처음으로 실행되지만 append가을 반환하기 때문에 None
for 루프의 첫 번째 반복 후에 할당이 list1
동일하게 None
되므로 두 번째 반복에서 오류가 발생합니다.
답변
나는 개인적으로 다음 +
보다 연산자를 선호합니다 append
.
for i in range(0, n):
list1 += [[i]]
그러나 이것은 매번 새로운 목록을 생성하므로 성능이 중요하다면 최고가 아닐 수도 있습니다.
답변
목록 내에서 필요한 위치에 숫자를 입력하기 위해 insert를 사용할 수도 있습니다.
initList = [1,2,3,4,5]
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]
또한 파이썬에서는 len () 메소드를 사용하여 항상 목록 길이를 얻을 수 있습니다.
답변
Mikola가 말했듯 append()
이 void를 반환하므로 append가 nonetype을 반환하기 때문에 모든 반복에서 list1을 nonetype으로 설정합니다. 다음 반복에서 list1은 null이므로 null의 append 메서드를 호출하려고합니다. Null에는 메서드가 없으므로 오류가 발생합니다.