[python] 빈 목록 끝에 추가하는 방법은 무엇입니까?

목록이 있습니다.

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을 반환합니다.


답변

appendNone을 반환하므로 두 번째 반복 append에서 NoneType의 메서드 를 호출 합니다. 할당을 제거하기 만하면됩니다.

for i in range(0, n):
    list1.append([i])


답변

Mikola는 정답이 있지만 조금 더 설명합니다. 처음으로 실행되지만 append가을 반환하기 때문에 Nonefor 루프의 첫 번째 반복 후에 할당이 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에는 메서드가 없으므로 오류가 발생합니다.