[코딩도장] day10. 리스트 추가/삭제 - append,extend,insert / pop,remove
■ 들어가기
- 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그
▶ 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)라는 자료형을 제공
-> 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조