IT/파이썬

[코딩도장] day10. 리스트 추가/삭제 - append,extend,insert / pop,remove

_하늘여우_ 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)라는 자료형을 제공

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