파이썬에서 배열 자료구조가 필요한 때는 리스트를 활용한다. 여기서는 코딩 테스트에 자주 활용하는 리스트 기법을 알아보도록 하겠다.
append()
메서드로 데이터 추가맨 끝에 데이터를 추가하려면 append()
메서드를 사용하면 된다.
# 리스트의 맨 끝에 데이터 추가
my_list = [1, 2, 3]
my_list.append(4) # [1, 2, 3, 4]
연산자로 리스트 맨 끝에 다른 리스트의 데이터를 추가할 수도 있다. 다음 코드는 기존 my_list = [1, 2, 3]
에 [4, 5]
를 추가해 [1, 2, 3, 4, 5]
가 되었다.
my_list = [1, 2, 3]
my_list = my_list + [4, 5] # [1, 2, 3, 4, 5]
insert()
메서드로 데이터 삽입insert()
메서드를 사용하면 특정 위치에 데이터를 삽입할 수 있다. insert()
메서드는 첫 번째 인수에 데이터를 삽입할 위치를 받고, 두 번째 인수에 삽입할 데이터를 받는다. 이렇게 하면 지정한 위치에 데이터를 삽입하고 뒤쪽 데이터를 하나씩 뒤로 이동시킨다.
my_list = [1, 2, 3, 4, 5]
my_list.insert(2, 9999) # [1, 2, 9999, 3, 4, 5]
pop()
메서드로 특정 위치의 데이터 팝pop()
메서드는 팝할 데이터의 인덱스를 인수로 받아 삭제하고 삭제한 데이터의 값을 반환한다.
my_list = [1, 2, 3, 4, 5]
popped_element = my_list.pop(2) # 3
print(my_list) # [1, 2, 4, 5]
pop(2)
를 호출하면 3을 삭제하면서 반환하므로 popped_element
에는 3이 저장된다. 이후 my_list
를 출력하면 [1, 2, 4, 5]
를 출력한다.
remove()
메서드로 특정 데이터 삭제remove()
메서드는 앞서 설명한 pop()
메서드와 다르게 특정 위치가 아닌, 특정 데이터 자체를 삭제하는 함수이다. remove()
메서드는 인수로 받은 값이 처음 등장하는 위치의 데이터를 삭제한다.
my_list = [1, 2, 3, 2, 4, 5]
my_list.remove(2) # [1, 3, 2, 4, 5]
처음 등장하는 위치의 데이터라는 말을 설명하기 위해 리스트에 일부러 같은 데이터를 넣어두었다. 이 상태에서 remove(2)
를 실행하면 첫 번째 위치에 있는 2를 삭제한다.
리스트 컴프리헨션list comprehension
은 기존 리스트를 기반해 새 리스트를 만들거나 반복문, 조건문을 이용해 복잡한 리스트를 생성하는 등 다양한 상황에서 사용할 수 있는 문법이다.
예를 들어 리스트의 모든 데이터에 제곱 연산을 적용하려면 다음과 같이 코드를 작성한다.
numbers = [1, 2, 3, 4, 5]
squares = [num**2 for num in numbers] # [1, 4, 9, 16, 25]
여기서 주목해야 하는 점은 numbers
리스트의 값 변화 유무입니다. numbers
값 자체는 [1, 2, 3, 4, 5]
로 이전과 비교해서 바뀌지 않았다. 이처럼 리스트 컴프리헨션은 연산이 끝난 리스트를 반환할 뿐이지 연산 대상 리스트를 바꾸지 않는다.
이외에도 코딩 테스트에서 활용하면 유용한 4가지 메서드를 코드와 함께 소개하겠다.
len()
함수index()
메서드, 없으면 -1 반환sort()
메서드count()
메서드fruits = ["apple", "banana", "cherry", "apple", "orange", "banana", "kiwi"]
len(fruits) # 7
fruits.index("banana") # 1
fruits.sort( ) # ["apple", "apple", "banana", "banana", "cherry", "kiwi", "orange"]
fruits.count("apple") # 2
sort()
메서드에 아무런 인수도 전달하지 않으면, 즉, 아무 기준도 적용하지 않으면 오름차순으로 데이터를 정렬한다. 만약 다음과 같이 기준을 전달하면 내림차순으로 데이터를 정리한다. 이때 sort()
메서드는 정렬된 값을 반환하지 않고 원본 리스트를 정렬한다.
fruits.sort(reverse=True)