ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day10. 리스트 추가/삭제 - append,extend,insert / pop,remove
    IT/파이썬 2020. 8. 22. 16:43

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit22. 리스트와 튜플 응용하기

         - 22.1 리스트 조작하기

         - 22.2 리스트의 할당과 복사 알아보기

         - 22.3 반복문으로 리스트의 요소를 모두 출력하기

         - 22.4 리스트의 가장 작은 수, 가장 큰 수, 합계 구하기

         - 22.5 리스트 표현식 사용하기

         - 22.6 리스트에 map 사용하기

         - 22.7 튜플 응용하기

     

    >> 22.1 리스트 조작하기 <<

    1. 리스트에 요소 추가하기

    - 파이썬 리스트는 요소를 추가/삭제, 정보를 조회하는 메서드(함수)를 제공하고 있음

    - 리스트에 요소 추가하기 위한 대표적인 3가지 메서드

    • append: 요소 하나를 추가
    • extend: 리스트를 연결하여 확장
    • insert: 특정 인덱스에 요소 추가

    1.1 append - 리스트에 요소 하나 추가하기

    - 리스트 끝에 요소 하나를 추가

    - 비어있는 리스트에 값 추가 가능

    -> append로 요소/리스트 추가하면 리스트의 길이는 항상 1씩 증가

    - 사용법: append(요소)

    >>> a = [10, 20, 30]
    >>> a.append(500)
    >>> a
    [10, 20, 30, 500]
    >>> len(a)
    4

    - 리스트 내에 리스트 추가 가능

    - 사용법: append(리스트)

    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> len(a)
    3
    >>> a.append([500, 600])
    >>> a
    [10, 20, 30, [500, 600]]
    >>> len(a)
    4
    >>> a.append(700, 1000) # 리스트가 아닌 요소는 한 가지만 추가하여야 함
    Traceback (most recent call last):
      File "<pyshell#31>", line 1, in <module>
        a.append(700, 1000) # 리스트가 아닌 요소는 한 가지만 추가하여야 함
    TypeError: append() takes exactly one argument (2 given)

    1.2 extend - 리스트 확장하기

    - 리스트에 여러 개의 요소를 추가하기 위해 사용

    - 단, 여러 개의 요소를 넣는 것이 아니라 "리스트" 형식으로 추가하면 기존 리스트 끝에 추가된 리스트가 합쳐짐

      ( extend에 전달된 리스트 요소를 반복하면서 기존 리스트에 추가하는 방식 )

    -> extend로 여러 요소 추가 시 , 전달된 리스트 길이만큼 증가

    - 사용법: extend(리스트)

    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> len(a)
    3
    >>> a.extend(100, 200)
    Traceback (most recent call last):
      File "<pyshell#43>", line 1, in <module>
        a.extend(100, 200)
    TypeError: extend() takes exactly one argument (2 given)
    >>> 
    >>> 
    >>> 
    >>> a.extend([100, 200])
    >>> a
    [10, 20, 30, 100, 200]
    >>> len(a)
    5

    1.3 insert - 리스트 특정 인덱스에 요소 추가하기

    - 사용법: insert(인덱스, 요소)

      ( 리스트의 인덱스는 0부터 시작 ~ )

    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> a.insert(2, 500)
    >>> a
    [10, 20, 500, 30]

    - insert에서 자주 사용하는 패턴

    • insert(0, 요소) : 리스트의 맨 처음에 요소 추가
    • insert(len(리스트), 요소) : 리스트의 끝에 요소 추가 ( len(리스트)는 마지막 인덱스보다 1이 더 큼 )
    >>> a = [10, 20, 30]
    >>> a.insert(0, 500) # 리스트의 맨 처음에 요소 추가
    >>> a
    [500, 10, 20, 30]
    >>> 
    >>> a = [10, 20, 30]
    >>> len(a)
    3
    >>> a.insert(len(a), 500) # 리스트 끝에 요소 추가
    >>> a
    [10, 20, 30, 500]
    >>> len(a)
    4

    - insert에 리스트 추가 ( append(리스트)와 동일 )

    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> a.insert(1, [500, 600]) # 인덱스 1에 리스트 추가
    >>> a
    [10, [500, 600], 20, 30]
    >>> len(a)
    4

    - 리스트 중간에 요소 여러 개 추가 => 슬라이스 사용

    • 시작인덱스와 끝인덱스가 같은 경우 : 해당 인덱스 요소를 덮어쓰지 않고 요소 여러 개를 중간에 추가
    • 시작인덱스와 끝인덱스가 다른 경우 : 해당 인덱스 요소를 요소 여러 개가 덮어씀
    >>> a = [10, 20, 30]
    >>> len(a)
    3
    >>> a
    [10, 20, 30]
    >>> a[1:1] = [500, 600]
    >>> len(a)
    5
    >>> a
    [10, 500, 600, 20, 30]
    >>> a = [10, 20, 30]
    >>> a[1:2] = [500, 600]
    >>> a
    [10, 500, 600, 30]
    >>> len(a)
    4

    1.4 pop/remove - 리스트에서 요소 삭제

    - 리스트의 요소 삭제하는 메서드 2개

    • pop : 마지막 요소 또는 특정 인덱스의 요소를 삭제 후 삭제한 요소 반환
    • del : 특정 인덱스 요소 삭제 (삭제한 요소 반환 X)
    • remove : 특정 값을 찾아서 삭제
    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> len(a)
    3
    >>> a.pop()     # 마지막 요소 삭제
    30
    >>> len(a)
    2
    >>> a
    [10, 20]
    >>> a = [10, 20, 30]
    >>> a
    [10, 20, 30]
    >>> len(a)
    3
    >>> a.pop(1)     # 인덱스 1 삭제
    20
    >>> len(a)
    2
    >>> a
    [10, 30]
    >>> a = [10, 20, 30]
    >>> len(a)
    3
    >>> a.remove(20)
    >>> len(a)
    2
    >>> a
    [10, 30]
    >>> a.remove(20)     # 미존재하는 값 전달 시 에러
    Traceback (most recent call last):
      File "<pyshell#111>", line 1, in <module>
        a.remove(20)
    ValueError: list.remove(x): x not in list

    - 만일 리스트에 동일한 값이 여러 개 존재하는 경우, 처음 찾은 값만 삭제함

    >>> a = [10, 20, 30, 20, 20]
    >>> len(a)
    5
    >>> a.remove(20)
    >>> len(a)
    4
    >>> a
    [10, 30, 20, 20]

    >> 리스트로 스택과 큐 만들기 (참고 : https://blog.tomclansys.com/69)

    - 스택 : LIFO(Last In First Out, 후입선출), 자료구조의 하나로 push(입력)/pop(출력)으로 구현

    - 큐 : FIFO(First In First Out, 선입선출), 자료구조의 하나로 enqueue(입력)/dequeue(출력)으로 구현

    [스택 만들기]
    >>> a = []
    >>> a
    []
    >>> a.append(10)
    >>> a
    [10]
    >>> a.pop()
    10
    >>> a
    []
    [큐 만들기]
    >>> a.append(10)
    >>> a
    [10]
    >>> a.append(20)
    >>> a
    [10, 20]
    >>> a.append(30)
    >>> a
    [10, 20, 30]
    >>> a.pop(0)
    10
    >>> a
    [20, 30]

    -> 파이썬에서는 '큐'를 좀 더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)라는 자료형을 제공

    -> 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조

    댓글

Designed by Tistory.