아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
이타치처럼탈주
이타치처럼탈주20.06.22

파이썬 deque에서 append랑 extend 차이가 뭔가요?

알고리즘 공부중인데

append는 추가할 때 쓰고, extend는 확장할 때 쓴다는데

기능은 같다고 하는데...

그럼 둘 중에 아무거나 쓰면 되나요?

무슨 차이가 있는거죠?

답변 미리 감사합니다.

55글자 더 채워주세요.
답변의 개수4개의 답변이 있어요!
  • extend는 전체를 통째로 넣어버리는 append와 달리, iterable의 모든 항목을 다 추가합니다.

    다음과 같은 예시로 차이점을 확실히 확인 할 수 있습니다.

    a = [1] b = [[2, 3]] # append를 사용할 경우, 리스트가 통째로 들어감 a.append(b) print(a) >>> [1, [[2, 3]]] # extend를 사용할 경우, 리스트 b안의 요소만 들어감 a.extend(b) print(a) >>> [1, [2, 3]]

    또한 extend는 다음과 같이 리스트를 한꺼번에 추가하기에도 용이합니다.

    a = [] a.extend([1, 2, 3]) print(a) >>> [1, 2, 3]

    감사합니다.


  • 사용법이 다릅니다.

    a = ['Hello']; a.extend('World!') print(a) # 결과 : ['Hello', 'W', 'o', 'r', 'l', 'd', '!'] b = ['Hello']; b.append('World!') print(b) # 결과 : ['Hello', 'World!']

    extend는 인자로 iterable을 받아서 그 iterable의 모든 원소를 추가하고,|
    append는 인자로 받은 객체 하나를 추가합니다.

    a = ['Hello']; a.extend([1, 2, 3]) print(a) # 결과 : ['Hello', 1, 2, 3] b = ['Hello']; b.append([1, 2, 3]) print(b) # 결과 : ['Hello', [1, 2, 3]]

    하나를 추가할 때는 append를, 여러개를 추가할 때는 extend를 쓰시면 됩니다.


  • https://wiki.python.org/moin/TimeComplexity

    append 는 deque에서 맨 끝에 추가하는 것이고

    extend는 맨 끝에 여러개 추가하는 것입니다. k개라면 O(k)

    https://m.blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=221541104629&categoryNo=50&proxyReferer=https:%2F%2Fwww.google.com%2F

    참고하시면 될 것 같습니다.(맨 끝에 넣을때는 deque, list 차이 없다고 보면 됩니다)

    append를 여러번 하든, extend을 통해 한번에 넣든 시간복잡도면에서는 차이 안납니다.


  • 공식문서(https://docs.python.org/ko/3/)를 보면 다음과 같이 설명되어 있습니다.

    array.appen(x)

    배열의 끝에 값 x로 새 항목을 추가합니다.

    array.extend(iterable)

    iterable의 항목을 배열의 끝에 추가합니다. iterable이 다른 배열이면, 정확히 같은 형 코드를 가져야 합니다; 그렇지 않으면, TypeError가 발생합니다. iterable이 배열이 아니면, 이터러블이어야 하며 요소는 배열에 추가할 올바른 형이어야 합니다.

    새 항목을 추가하는 것과 해당 항목을 추가하는 차이가 있습니다.

    그리고 extend의 경우는 같은 형 코드를 가져야 한다고도 얘기를 해주고 있습니다.

    코드로 확인해볼게요.

    ex) 숫자 4를 넣으려는 경우

    In [1]: x = [1, 2, 3] In [2]: x.append(4) In [3]: print(x) [1, 2, 3, 4]

    In [4]: x = [1, 2, 3] In [5]: x.extend(4) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-e4accd60cc21> in <module> ----> 1 x.extend(4) TypeError: 'int' object is not iterable

    append를 하면 4가 들어가지만 extend를 하면 타입이 달라서 에러가 나는 것을 볼 수 있습니다.

    ex) 배열 4를 넣으려는 경우

    In [1]: x = [1, 2, 3] In [2]: x.append([4]) In [3]: print(x) [1, 2, 3, [4]]

    In [4]: x = [1, 2, 3] In [5]: x.extend([4]) In [6]: print(x) [1, 2, 3, 4]

    append를 하면 배열 안에 배열이 추가가 된 것을 볼 수 있습니다.