○ 리스트 생성
- 리스트의 인덱스는 0부터 시작을 하며, 리스트 선언은 list() 혹은[] 를 이용한다.
# 비어있는 리스트 선언 방법1
a = list()
# 비어있는 리스트 선언 방법2
a = []
# 인덱스를 통한 원소 접근
a = [1,2,3,4,5]
print(a[3]) # 인덱스가 0부터 시작하므로 4가 출력이 됨
# 크기가 n이며, 원소의 값이 모두 0인 1차원 리스트 생성
n = 7
a = [0]*n
print(a) # [0,0,0,0,0,0,0] 이 출력
○ 리스트 인덱싱, 슬라이싱
- 인덱스값을 통한 리스트 접근을 하는 것을 인덱싱이라고 한다.(음의 정수도 사용 가능)
- 리스트 내에서 연속적인 위치에 있는 원소 값들을 가져올 때 슬라이싱을 이용한다.(대괄호 안에 :를 넣어 사용)
a = [1,2,3,4,5]
# 뒤에서 첫 번째 원소 출력
print(a[-1])
# 뒤에서 세 번째 원소 출력
print((a[-3])
# 두 번째 원소 값 바꾸기
a[1] = 7
print(a) # [1,7,3,4,5]로 출력
# 슬라이싱을 통한 두 번째 원소부터 4번째 원소까지 출력
print(a[1:4]) # 인덱스는 0부터 시작이고 :다음의 값은 그 값의 미만을 나타냄
○ 리스트 컴프리헨션
- 리스트를 초기화하는 방법 중 하나.(직관적으로 리스트를 생성)
- 대괄호로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성을 함
- 여러 줄을 쓸 것을 한 줄로 표현하여 직관적이며, 속도도 더 빠르기 때문에 사용함.
# 0부터 10까지의 수 중에서 홀수만을 포함하는 리스트
a = [i for i in range(11) if i % 2 == 1] # a=[1,3,5,7,9]
# 위의 소스코드를 일반적인 소스코드로 작성
a = []
for i in range(11):
if i % 2 == 1:
a.append(i)
# 1 ~ 9 까지의 수의 제곱 값을 나타내는 리스트
a = [i * i for i in range(1,10)] # a = [1,4,9,16,25,36,49,64,81]
# N*M 크기의 2차원 리스트 초기화 방법
n = 5
m = 5
a = [[0] * m for _ in range(n)] # a = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
# 조건문(if)을 쓸 경우 => if문만 쓸 경우 오른쪽, if else문을 쓸 때는 왼쪽에 사용함
[i for i in range(5) if i %2 == 0 if i % 4 == 0] # 출력은 [0,4]가 출력이 됨.
# if 두 개를 사용할 경우 and 조건으로 되어서 출력됨.
[i if i %2 == 0 else 'yes' for i in range(5)] # [0, 'yes', 2, 'yes', 4]
# i if i %2 == 0 : i가 2로 나누어지면 i 출력, else 'yes' : 그 외는 yes 출력
[i if i %2 == 0 else 'yes' if i==1 else 'no' for i in range(5)] # [0, 'yes', 2, 'no', 4]
# if else 문은 여러 개 사용 가능하며, elif와 같은 효과를 준다.
# 이중 for 문
[(i,j) for i in range(2) for j in range(3)] # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
# 그 외 집합 컴프리헨션, 딕셔너리 컴프리헨션도 할 수 있음
{i for i in range(5)} # {0,1,2,3,4}
{i : i for i in range(5)} # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
※ 2차원 리스트를 초기화 할 때는 반드시 리스트 컴프리헨션을 사용해야 함.
※ 파이썬에서는 언더바는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 주로 사용함.
○ 리스트 관련 함수(메소드)
함수명 | 표현 | 설명 |
시간 복잡도 | |
append() | 변수명.append() | 리스트에 원소를 하나 삽입할 때 사용 |
O( 1 ) | |
sort() | 변수명.sort() | 정렬 기능, 오름차순 |
O(NlogN) | |
변수명.sort(reverse=True) | 내림차순 정렬 |
|||
reverse() | 변수명.reverse() | 리스트의 원소의 순서를 모두 뒤집어 놓는다. |
O( N ) | |
insert() | 변수명.insert(인덱스, 삽입값) | 특정한 인덱스 위치에 원소값을 삽입할 때 사용 |
O( N ) | |
count() | 변수명.count(값) | 리스트에서 특정한 값을 가지는 데이터 갯수를 셀 때 사용 |
O( N ) | |
remove() | 변수명.remove(값) | 특정한 값을 갖는 원소를 제거하는데 사용, 값을 가진 원소가 여러 개면 하나만 제거 |
O( N ) |
※ insert(), remove()의 경우 원소를 삽입 또는 삭제 후 원소 위치를 조정해주어야 하므로 시간 복잡도가 O( N )이다.
따라서 남발하게 되면 코딩테스트시 '시간 초과'가 될 수도 있다. 아래 소스는 특정한 값을 가지는 모든 원소를 제거하는 방법이다.
a = [1,2,3,4,5,5,5]
remove_set = {3,5}
result = [ i for i in a if i not in remove_set] # result = [1,2,4]
'코딩관련 > 파이썬 문법' 카테고리의 다른 글
Join (0) | 2021.06.24 |
---|---|
global, lambda (0) | 2021.06.02 |
입출력 (0) | 2021.05.31 |
튜플형, 사전형, 집합형 (0) | 2021.05.30 |
수 자료형 (0) | 2021.05.30 |