[Python] 자주 활용하는 리스트 기법

김찬미·2024년 6월 20일
0

Python

목록 보기
2/7
post-thumbnail

파이썬에서 배열 자료구조가 필요한 때는 리스트를 활용한다. 여기서는 코딩 테스트에 자주 활용하는 리스트 기법을 알아보도록 하겠다.


리스트에 데이터 추가

1) append() 메서드로 데이터 추가

맨 끝에 데이터를 추가하려면 append() 메서드를 사용하면 된다.

# 리스트의 맨 끝에 데이터 추가
my_list = [1, 2, 3]
my_list.append(4) # [1, 2, 3, 4] 

2) + 연산자로 데이터 추가

연산자로 리스트 맨 끝에 다른 리스트의 데이터를 추가할 수도 있다. 다음 코드는 기존 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] 

3) insert() 메서드로 데이터 삽입

insert() 메서드를 사용하면 특정 위치에 데이터를 삽입할 수 있다. insert() 메서드는 첫 번째 인수에 데이터를 삽입할 위치를 받고, 두 번째 인수에 삽입할 데이터를 받는다. 이렇게 하면 지정한 위치에 데이터를 삽입하고 뒤쪽 데이터를 하나씩 뒤로 이동시킨다.

my_list = [1, 2, 3, 4, 5]
my_list.insert(2, 9999) # [1, 2, 9999, 3, 4, 5] 

리스트에서 데이터 삭제

1) 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]를 출력한다.

2) 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]로 이전과 비교해서 바뀌지 않았다. 이처럼 리스트 컴프리헨션은 연산이 끝난 리스트를 반환할 뿐이지 연산 대상 리스트를 바꾸지 않는다.


[Tip] 깨알 같은 리스트 연관 메서드

이외에도 코딩 테스트에서 활용하면 유용한 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) 
profile
백엔드 지망 학부생

0개의 댓글