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


81

목록이 있습니다.

list1=[]

목록의 길이가 결정되지 않았으므로 다음과 같이 list1 끝에 개체를 추가하려고합니다.

for i in range(0, n):

    list1=list1.append([i])

하지만 내 출력은 다음 오류를 계속 표시합니다. AttributeError : 'NoneType'object has no attribute 'append'

list1이 빈 목록으로 시작하기 때문입니까? 이 오류를 어떻게 수정합니까?


42
-1 제발. append ()가 None을 반환한다는 사실은 초보자를 속일 수 있습니다. 질문은 진짜입니다.
e-satis 2011-06-14

답변:


73

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)).


마지막 비트가 매우 도움이되었다 그리고 무리에 의해 내 코드를 단축 것을 감사
LostLin

@AndrewJaffe, 목록 목록은 어떻습니까?
Py-ser

1
무엇을하고 싶은지에 따라 다릅니다. append가장 바깥 쪽 목록에 추가되지만 색인을 생성하여 중첩 목록에 추가 할 수 있습니다. a[-1].append(3)3의 마지막 하위 목록에 추가 합니다 a.
Andrew Jaffe 2014 년

18

할당 연산자가 필요하지 않습니다. append는 None을 반환합니다.


void는 파이썬에 존재하지 않습니다. 무효 사실은 없음입니다
야콥 보이어

5

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

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

3

Mikola는 정답이 있지만 조금 더 설명합니다. 처음으로 실행되지만 append가을 반환하기 때문에 Nonefor 루프의 첫 번째 반복 후에 할당이 list1동일하게 None되므로 두 번째 반복에서 오류가 발생합니다.


3

나는 개인적으로 다음 +보다 연산자를 선호합니다 append.

for i in range(0, n):

    list1 += [[i]]

그러나 이것은 매번 새로운 목록을 생성하므로 성능이 중요하다면 최고가 아닐 수도 있습니다.


1

목록 내에서 필요한 위치에 숫자를 입력하기 위해 insert를 사용할 수도 있습니다.

initList = [1,2,3,4,5]
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]

또한 파이썬에서는 len () 메소드를 사용하여 항상 목록 길이를 얻을 수 있습니다.


0

Mikola가 말했듯 append()이 void를 반환하므로 append가 nonetype을 반환하기 때문에 모든 반복에서 list1을 nonetype으로 설정합니다. 다음 반복에서 list1은 null이므로 null의 append 메서드를 호출하려고합니다. Null에는 메서드가 없으므로 오류가 발생합니다.


-3

my_list.append (...)를 사용하고 목록은 변경 가능하므로 추가 할 다른 목록은 사용하지 마십시오.


2
이 답변은 이해하기 어렵고 (예를 들어 두 번째 부분에서 의미하는 바를 잘 모르겠습니다) 기존 답변 (2014 년부터)의 정보를 반복하거나 (말 그대로 취한 경우) 완전히 잘못되었습니다 (OP의 코드에는 my_list변하기 쉬운).
멜 포메 네
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.