Language/Python

[Python] 리스트 조작하기 (append, extend, insert, pop, del, remove, clear, index, count, reverse, sort)

위시리 2024. 12. 31. 00:26

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이 더 큰 상태이다.
따라서 리스트 끝에서부터 시작하겠다는 뜻이다. (이때는 리스트의 범위를 벗어난 인덱스를 사용할 수 있다).