[정리] 코딩테스트 자주 활용하는 python 리스트 함수

 

리스트에서 데이터 추가

append()

리스트의 맨 끝에 데이터 추가 

my_list = [1,2,3]
my_list.append(4) #[1,2,3,4]

 

+ 연산자로 데이터 추가 

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]

 

 

remove()

remove()메서드로 특정 데이터 삭제 

인수로 받은 값이 처음 등장하는 위치의 데이터를 삭제

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

 

리스트 컴프리헨션으로 데이터에 특정 연산 적용

기존 리스트를 기반해 새 리스트를 만들거나 반복문, 조건문을 이용해 복잡한 리스트를 생성하는 등 다양한 상황에서 사용 가능

 

제곱 연산 적용 예

numbers = [1,2,3,4,5]
squares = [num**2 for i in numbers] #[1,4,9,16,25]
#numbers 는 여전히 [1,2,3,4,5]

 

numbers의 값 자체는 동일하며 바뀌지 않는다. 리스트 컴프리헨션은 연산이 끝난 리스트를 반환할 뿐이지 연산 대상 리스트를 바꾸지 않는다.

 

 


index()

특정 데이터가 처음 등장한 인덱스 반환

 

sort()

- 사용자가 정한 기준에 따라 데이터를 정렬

- 정렬된 값을 반환하지 않고 원본 리스트를 정렬 

 

아무런 인수도 전달하지 않으면 오름차순으로 데이터를 정렬한다. 만약 reverse=True라는 기준을 인수로 전달하면 내림차순으로 정렬한다.

fruits.sort(reverse = True) #내림차순 정렬

 

count()

특정 데이터의 개수를 반환

 

enumerate()

인덱스와 원소에 동시 접근 

>>> for i, letter in enumerate(['A', 'B', 'C'], start=101):
...     print(i, letter)
...
101 A
102 B
103 C

 


 

정수 배열을 정렬해서 반환하는 solution 함수

def solution(arr) : 
	arr.sort()
    return arr

 

def solution(arr): 
	sorted_list = list(sort(arr))
    return sorted_list

 

 

Q. 만약 sort() 메서드를 사용하지 않고, O(N^2) 정렬 알고리즘을 사용한다면?

format()

문자열 형식화 메서드

다양한 데이터 유형을 문자열에 삽입하고 형식을 지정할 수 있다.

# 소수점 이하 자릿수를 지정하여 형식화
num = 3.141592653589793238
formatted_num = format(num, ".2f")
print(formatted_num)  # 출력: 3.14

 

또는 여러 개의 값을 형식화하여 문자열에 삽입

name = "Alice"
age = 30
formatted_string = "이름: {}, 나이: {}".format(name, age)
print(formatted_string)  # 출력: 이름: Alice, 나이: 30

 

외에 다양한 옵션을 제공

 

 

시간 계산 코드

#using O(N^2)정렬 알고리즘

import time

#버블 정렬 : 인접한 두 요소를 비교하면서 작은 값을 왼쪽으로 이동
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

def do_sort(arr):
    arr.sort()
    return arr

def measure_time(func, arr):
    start_time = time.time()
    result = func(arr)
    end_time = time.time()
    return end_time - start_time, result


arr = list(range(10000))

# 첫 번째 코드 시간 측정
bubble_time, bubble_result = measure_time(bubble_sort, arr)
print("버블 정렬 실행 시간 : ", format(bubble_time, ".10f"))

# 두 번째 코드 시간 측정
arr = list(range(10000))
reverse_time, reverse_result = measure_time(do_sort, arr)
print("두 번째 코드 실행 시간 : ", format(reverse_time, ".10f"))

# 두 개의 코드가 결과가 동일한지 확인
print("두 개의 코드의 결과가 동일한지 확인: ", bubble_result == reverse_result)

 

결과 : 

버블 정렬 실행 시간 :  3.8462228775
두 번째 코드 실행 시간 :  0.0000808239
두 개의 코드의 결과가 동일한지 확인:  True

 

압도적으로 sort() 함수가 성능이 좋다는 는 것을 알 수 있다

 

 

Q. 배열의 중복값을 제거하고 데이터를 내림차순으로 정렬해서 반환하는 함수 작성

set()

집합을 생성하는 내장 함수, 집합은 중복값을 허용하지 않으므로 문제에서 요구하는 중복 문제를 한 번에 해결할 수 있다. 

def solution(lst):
    unique_lst = list(set(lst))
    unique_lst.sort(reverse=True)

 


파이썬에는 코딩테스트에 유용한 함수가 많다. 굳이 직접 작성하려 하지 말자.