a = 100 # 양의 정수
print(a)
a = -7 # 음의 정수
print(a)
a = 0 # 0
print(a)
# 소수부가 0일 때 0을 생략
a = 5.
print(a) // 5.0
# 정수부가 0일때 0을 생략
a = -.7
print(a) // 0.7
실수형 데이터를 표현하는 방식으로 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다. e 다음에 오는 수는 10의 지수부를 의미한다. 예를 들어 1e9라고 입력하게 되면, 10의 9제곱(1,000,000,000)이 된다.
ex) 최단 경로 문제에서는 도달할 수 없는 노드에 대하여 최단 거리를 '무한(INF)'으로 설정되곤한다. 최단 경로로 가능한 최댓값이 10억 미만이라면 무한(INF)을 표현할 때 1e9로 표현할 수 있는 것이다. 또한 큰 수를 표현할 때, 0의 개수가 많아지게 되면 자릿수가 헷갈리게 되는 경우가 많다. (혹은 987,654,321)이라고 적으면 이게 1e9와 유사할 정도로 크므로 이렇게 적기도 한다.
* 코딩 테스트 문제에서는 주로 크기가 N인 1차원 리스트를 초기화해야 하는데 다음 방식으로 초기화 하면 편리하다. 아래 코드는 크기가 N이고 모든 값이 0인 1차원 리스트를 초기화 하는 소스코드
#크기가 N이고 , 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a) // [0,0,0,0,0,0,0,0,0.0]
인덱스값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱(Indexing)이라고 한다.
파이썬의 인덱스값은 정수를 모두 사용 가능
음의 정수를 넣으면 원소를 거꾸로 탐색
ex) 인덱스에 -1을 넣으면 가장 마지막 원소가 출력된다.
또한 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱(Slicing)을 이용할 수 있다. 이 때는 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 (끝 인덱스 -1)을 설정할 수 있다.
ex) a라는 리스트의 두 번째 원소부터 네 번째 원소까지의 모든 데이터를 갖는 리스트를 가져오고 싶다면 a[1:4]
array = [i for i in range(20) if i % 2 ==1]
print(array) [1,3,5,7,9,11,13,15,17,19]
# 1부터 9까지의 수의 제곱값을 포함하는 리스트
array = [i* i for in range(1,10)]
print(array) // [1,4,9,16,25,36, 49,64,81]
n = 3
m = 4
array = [ [0] * m for _ in range(n)]
print(array) // [[0,0,0,0], [0,0,0,0], [0,0,0,0]]
언더바(_)는 어떤 역할?
-> 파이썬 자료구조/알고리즘에서는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자할 때 언더바()를 자주 사용한다. 단순히 'Hello world'를 5번 출력할 때는 오른쪽처럼 언더바()를 이용하여 무시할 수 있다.
for _ in range(5)
print("Hello world")
메서드명 | 사용법 | 설명 | 시간 복잡도
append() | 변수명.append() | 리스트에 원소를 하나 삽입할 때 사용 | O(1)
sort() | 변수명.sort() | 기본 정렬 기능으로 오름차순으로 정렬 | O(NlogN)
| 변수명.sort(reverce = True) 내림차순으로 정렬
reverse() | 변수명.reverse() | 리스트의 원소의 순서를 모두 뒤집어 놓는다 | O(N)
insert() | 변수명.insert(삽입할 위치 인덱스, 삽입할 값) |특정한 인덱스 위치에 원소를 삽입할 때 사용한다. | O(N)
count() | 변수명.count(특정값) | 리스트에서 특정한 값을 가지는 데이터의 개수를 셀 때 사용 | O(N)
remove() | 변수명.remove(특정값) | 특정한 값을 갖는 원소를 제거하는데, 값을 가진 원소가 여러 개면 하나만 제거한다.
| O(N)
-> 특정한 값의 원소를 모두 제거하려면 어떻게?
a = [1,2,3,4,5,5,5]
remove_set = {3,5}
# remove_set에 포함되지 않는 값만을 저장
result = [i for i in a if i not in remove_set]
print(result) // [1,2,4]
문자열 변수를 초기화할 때는 큰따옴표(")나 작은 따옴표(')를 이용
문자열을 큰따옴표로 구성하는 경우, 내부적으로 작은 따옴표를 포함할 수 있으며 반대로도 가능
혹은 백슬래시()를 사용하면 큰 따옴표나 작은 따옴표를 문자열에 원하는 만큼 포함시킬 수 있다. data = "Don't you know \"python\"?"
문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해진다.
파이썬의 문자열을 내부적으로 리스트와 같이 처리되므로 문자열을 여러 개의 문자가 합쳐킨 리스트라고 볼 수 있다 따라서 문자열 데이터에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있다.
프로그래밍 문법에서는 백슬래시와 같은 문자를 '이스케이프 문자'로 정해두고 큰따옴표를 출력하는 등의 특별한 목적으로 사용한다.
파이썬의 튜플 자료형은 리스트와 거의 비슷한데 다음과 같은 차이가 있다.
- 튜플은 한 번 선언된 값을 변경할 수 없다.
- 리스트는 대괄호([])를 이용하지만 튜플은 소괄호(())를 이용한다.
튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다. 예를들어 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않는다. 그래서 그 우선순위 큐에 들어가는 데이터를 튜플로 구성하여 소스코드를 작성한다. -> 이렇게 알고리즘을 구현하는 과정에서 일부러 튜플을 이용하게 되면 혹여나 자신이 알고리즘을 잘못 작성함으로써 변경하면 안되는 값이 변경되고 있지는 않은지 체크할 수 있다.
튜플은 리스트에 비해 상대적으로 공간 효율적
일반적으로, 각 원소의 성질이 서로 다를 때 주로 사용
- 중복을 허용하지 않는다
- 순서가 없다
** 특히, '특정한 데이터'가 이미 등장한 적이 있는지 여부 를 체크할 때 매우 효과적
data = set([1,1,2,3,4,4,5])
print(data)
data = {1,1,2,3,4,4,5}
print(data)
위 코드 모두 {1,2,3,4,5}가 출력이 나온다.
add(), remove() 함수 모두 시간복잡도는 O(1)이다.