-
[코딩도장] day10. 리스트 추가/삭제 - append,extend,insert / pop,removeIT/파이썬 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)
51.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)
41.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)라는 자료형을 제공
-> 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조
'IT > 파이썬' 카테고리의 다른 글
[코딩도장] day10. 리스트 할당/복사, 리스트 표현식 (0) 2020.08.22 [코딩도장] day10. 리스트 요소값 조작하기 - index(), count(), reverse(), sort(), sorted, clear() (0) 2020.08.22 [코딩도장] day9. 반복문 제어 - break, continue (0) 2020.08.17 [코딩도장] day9. while 반복문 (0) 2020.08.17 [코딩도장] day8. for문 (0) 2020.08.15