[Python] 리스트 조작하기 (append, extend, insert, pop, del, remove, clear, index, count, reverse, sort)
1. 리스트에 요소 추가하기
리스트에 요소를 추가하는 대표적인 메소드 3가지
- append: 요소 하나를 추가
- extend: 리스트를 연결하여 확장
- insert: 특정 인덱스에 요소 추가
1-1. append
append(요소)를 통해 리스트에 하나의 요소를 추가할 수 있다.
1) 맨 마지막 요소에 값 추가
a = [1,2,3,4,5]
a.append(3)
# 출력 : [1, 2, 3, 4, 5, 3]
2) 리스트 안에 리스트 추가
a = [1,2,3,4,5]
a.append([6,7,8])
# 출력 : [1, 2, 3, 4, 5, 500]
2. 리스트 확장 하기
2-1. extend
append를 이용하여 여러번 사용하는 방법도 있지만 추가할 요소가 많은 경우에는 매번 요소를 추가하는 것이 번거로울 수 있다. 따라서 extend를 통해 리스트를 확장할 수도 있다.
extend(리스트)는 리스트 끝에 다른 리스트를 연결하여 리스트를 확장한다.
a = [1,2,3,4,5]
a.extend([6,7,8])
# 출력 : [1, 2, 3, 4, 5, 6, 7, 8]
3. 리스트의 특정 인덱스에 요소 추가하기
3-1. insert
append 와 extend 는 리스트 끝에 요소를 추가한다. 원하는 위치에 요소를 추가하기 위해 insert를 사용한다.
insert(인덱스, 요소)는 특정 인덱스에 요소를 하나 추가한다.
a = [1,2,3,4,5]
a.insert(4, 100)
# 결과 : [1, 2, 3, 4, 100, 5]
insert에서 자주 사용하는 패턴 2가지
- insert(0, 요소): 리스트의 맨 처음에 요소를 추가
- insert(len(리스트), 요소): 리스트 끝에 요소를 추가
인덱스보다 큰 값을 지정하면 리스트 끝에 요소 하나를 추가할 수 있다.
a = [1,2,3,4,5]
a.insert(len(a), 500)
print(a)
이 방법은 append와 같다.
특히 insert는 하나의 요소를 추가하므로 insert에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어간다. (중첩 리스트)
a = [1,2,3,4,5]
a.insert(2, [500, 600])
# 출력 : [1, 2, [500, 600], 3, 4, 5]
만약 리스트 중간에 여러 개의 요소를 추가하고 싶다면 슬라이스를 통해 할 수 있다.
a = [1,2,3,4,5]
a[1:1] = [500, 600]
# 출력 : [1, 500, 600, 2, 3, 4, 5]
4. 리스트에서 요소 삭제하기
- pop: 마지막 요소 또는 특정 인덱스의 요소를 삭제
- remove: 특정 값을 찾아서 삭제
1) 리스트에서 특정 인덱스 요소 삭제하기
4-1. pop
pop( )은 리스트의 마지막 요소를 삭제한 뒤 삭제한 요소를 반환한다.
a = [10, 20, 30]
b = a.pop()
print('b : ', b)
print('list a : ', a)
# 결과
# b : 30
# list a : [10,20]
원하는 인덱스의 요소를 삭제하고 싶다면 pop에 인덱스를 지정하면 된다.
pop(index)
a = [10, 20, 30]
b = a.pop(1)
print('b : ', b)
print('list a : ', a)
# 결과
# b : 20
# list a : [10,30]
4-2. del
pop 대신 del을 사용할 수도 있다.
del list [index]
a = [1,2,3,4,5]
del a[1]
출력 : [1, 3, 4, 5]
이때 del을 이용해 요소를 삭제할 때 슬라이스를 사용하여 특정 범위의 값을 삭제할 수 있다.
a = [1,2,3,4,5]
del a[1:4]
# 출력 : [1, 5]
del [:] 과 같이 작성하면 리스트의 모든 요소를 제거할 수 있다.
a = [1,2,3,4,5]
del a[:]
# 출력 : []
2) 리스트에서 특정 값 찾아서 삭제하기
위와 같이 pop이나 del을 이용해서 원하는 값을 찾아서 삭제할 수 있으나, 이런 경우 remove를 사용한다.
4-3. remove
remove(값)은 리스트에서 특정 값을 찾아서 삭제한다.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.remove(4)
# 출력 : [1, 2, 3, 5, 6, 7, 8, 9, 10]
만약 remove( )에서 삭제하려는 요소가 리스트 안에 여러개 있을 때는 처음 찾은 값(첫번째 요소)만 삭제된다.
a = [1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.remove(2)
# 출력 : [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10]
이때 중복되는 값을 모두 지우고 싶다면 while 반복문을 사용하여 중복되는 값을 제거할 수 있다.
arr = ['국어', '수학', '영어', '한국사', '국어', '사회탐구', '과학탐구', '제2외국어', '직업탐구', '국어']
while '국어' in arr :
arr.remove('국어')
# 출력 : ['수학', '영어', '한국사', '사회탐구', '과학탐구', '제2외국어', '직업탐구']
리스트에서 지우고 싶은 값이 2개 이상일 때는
- remove_set 에 제거하고자 하는 데이터들을 저장하고,
- remove_set 에 없는 데이터만 새로운 리스트에 저장하여 특정 값을 제거할 수 있다.
arr = ['국어', '수학', '영어', '한국사', '국어', '사회탐구', '과학탐구', '제2외국어', '직업탐구', '국어']
remove_set = {'국어', '한국사'}
arr = [i for i in arr if i not in remove_set]
# 출력 : ['수학', '영어', '사회탐구', '과학탐구', '제2외국어', '직업탐구']
4-4. clear
리스트의 모든 요소를 제거할 때 clear( )를 사용할 수 있다.
arr = ['국어', '수학', '영어', '한국사', '사회탐구', '과학탐구', '제2외국어', '직업탐구']
arr.clear()
# 출력 : []
5. 리스트에서 특정 값의 인덱스 구하기
5-1. index
index (값) 은 리스트에서 특정 값의 인덱스를 구한다.
이때 같은 값이 여러 개일 경우 처음 찾은 인덱스를 구한다.
a = [10, 20, 30, 15, 20, 40]
idx = a.index(20)
print(idx)
# 출력 : 1
6. 특정 값의 개수 구하기
6-1. count
count (값) 은 리스트에서 특정 값의 개수를 구한다.
a = [10, 20, 30, 15, 20, 40]
cnt = a.count(20)
print(cnt)
# 출력 : 2
7. 리스트 순서 뒤집기
7-1. reverse
reverse( )는 리스트에서 요소의 순서를 반대로 뒤집는다.
a = [10, 20, 30, 40, 50]
a.reverse()
# 출력 : [50, 40, 30, 20, 10]
8. 리스트 요소 정렬하기
8-1. sort
sort( )는 리스트 요소를 오름차순 / 내림차순으로 정렬한다.
- sort() 또는 sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
- sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)
a = [10, 20, 30, 15, 20, 40]
a.sort()
# 출력 : [10, 15, 20, 20, 30, 40]
a = [10, 20, 30, 15, 20, 40]
a.sort(reverse=True)
# 출력 : [40, 30, 20, 20, 15, 10]
sort 메서드 vs. sorted 함수
- sort는 메서드 // sorted는 내장 함수
- 둘다 정렬한다는 공통점이 있지만
- sort 는 메서드를 이용하여 사용한 리스트를 변경하지만
- sorted 함수는 정렬된 새 리스트를 생성한다.
9. 리스트를 슬라이스로 조작하기
리스트는 메서드를 사용하지 않고, 슬라이스로 조작할 수도 있다. 다음은 리스트 끝에 값이 한 개 들어있는 리스트를 추가하는 것이다.
a = [10, 20, 30]
a[len(a):] = [500]
# 출력 : [10, 20, 30, 500]
a[len(a):]는 시작 인덱스를 len(a)로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태이다.
따라서 리스트 끝에서부터 시작하겠다는 뜻이다. (이때는 리스트의 범위를 벗어난 인덱스를 사용할 수 있다).