컴공생 누르지 마세요! 컴공생 울어요.

[Python 문법 공부] 01. 자료형 - 리스트 자료형 본문

STUDY/Python

[Python 문법 공부] 01. 자료형 - 리스트 자료형

당도최고치악산멜론 2023. 3. 2. 20:38

리스트 자료형

- 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용

- C나 자바에서의 배열 기능 포함

- 내부적으로 연결 리스트 자료구조 -> append() & remove() 함수 지원

리스트 만들기

a = [1, 2, 3, 4, 5]

# 인덱스 이용 접근
print(a[2]) # 3

# 빈 리스트 선언 방법
a = list()
a = []

#크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

인덱싱과 슬라이싱

- 인덱스가 음수면 맨 뒤 원소부터 -1로 시작.

- 슬라이싱의 경우, a[시작 인덱스:끝 인덱스]

- 이때, 끝 인덱스에 1을 뺀 인덱스까지 출력됨

a = [1,2,3,4,5]

# 인덱싱
print(a[-1])     # 5
print(a[-3])     # 3

# 슬라이싱
print(a[1:4])    # [2,3,4]

리스트 컴프리헨션

- 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화하는 방법

# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]

# 1부터 9까지의 수들의 제곱으로 구성된 리스트
array = [i*i for i in range(1, 10)]

# N X M 크기의 2차원 리스트 초기화
n = 2
m = 3
array = [[0] * m for _ in range(n)]
# [[0,0,0], [0,0,0]]

- 언더바 (_)는 반복을 수행하되, 반복을 위한 변수의 값을 무시하고자 할 때 사용

# Hello world 5번 출력
for _ in range(5):
	print("Hello world")

- 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션 사용! 

- 아래와 같이 초기화 시 의도하지 않은 결과가 출력될 수 있음. (내부적으로 포함된 n 개의 리스트가 모두 동일한 객체에 대한 n개의 레퍼런스로 인식되기 때문)

array = [[0] * m] * n     # [[0,0,0], [0,0,0]]

array[1][1] = 5
print(array) # [[0,5,0], [0,5,0]]

리스트 관련 기타 메서드

메서드명 사용법 설명 시간 복잡도
append() 리스트명.append(특정 값) 리스트에 원소를 하나 삽입 O(1)
sort() 리스트명.sort()
리스트명.sort(reverse = True)
기본적으로 오름차순 정렬, reverse = True를 통해 내림차순 정렬 O(NlogN)
reverse() 리스트명.reverse() 리스트 원소들을 역순으로 정렬 O(N)
insert() 리스트명.insert(삽입할 인덱스 위치, 삽입할 값) 특정 인덱스 위치에 원소를 삽입 O(N)
count() 변수명.count(특정 값) 리스트에서 특정 값을 가지는 데이터의 개수를 셀 때 사용 O(N)
remove() 변수명.remove(특정 값) 특정한 값을 갖는 원소를 제거하는데, 값을 가진 원소가 여러 개면 하나만 제거  O(N)

- 주의) 코테에서 insert()나 remove() 남발 시 시간초과가 뜰 수 있음.

 

* 특정한 값의 원소를 모두 제거하는 코드

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}

# remove_set에 포함되어 있지 않은 원소로만 result 리스트 구성
result = [i for i in a if i not in remove_set]
print(result)
Comments