Python

이코테 : Python 문법 -1. 자료형 (수, 리스트, 문자열, 튜플, 사전, 집합)

식초 2020. 11. 7. 11:47

※모든 사진과 자료의 출처는 나동빈 [이것이 취업을 위한 코딩 테스트다] 입니다

 

수 자료형

 

정수형

a = 777

a = a + 5

print(a)

특정한 변수의 값증가/감소 시키는 것이 가능하다.

 

 

 

실수형

a = 5.

a = -.7

소수부, 정수부 0인 경우, 0인 부분 생략 가능하다.

 

a = 0.3 + 0.6

(출력: 0.89999999)

컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가진다.

2진수를 사용하기 때문이다.

 

a = 0.3 + 0.6

print(round(a, 4))

(출력: 0.9)

round()함수 : round(실수, 반올림하려는 자릿수)

 

 

 

지수 표현 방식

1e9 = 10의 9제곱 = 10억

e나 E 다음에 오는 수는 10의 지수부 이다.

임의의 큰 수를 표현하기 위해 자주 사용된다.

최단 경로 알고리즘 : 도달 못하는 노드에 대하여 최단 거리를 무한(INF)로 설정한다.

-가능한 최댓값이 10억 미만일 때, 무한의 값으로 1e9 이용한다.

 

#752.5

a = 75.25e1

#3.954

a = 3954e-3

 

지수는 실수로 표현된다 -> 정수형으로 바꿔주려면 int() 안에 넣는다.

a = int(1e9)

 

 

 

수 자료형의 연산

+ - * /

파이썬은 나눠진 결과실수형으로 반환한다.

% : 나머지 연산자

// : 몫 연산자

** : 거듭 제곱 연산자

a ** b (거듭 제곱)

a ** 0.5 (제곱근)

수학 라이브러리 사용 안 해도 기본 제공 연산자로 사용 가능하다.

 

 

 


리스트 자료형

여러 개의 데이터를 연속적으로 처리하기 위해 사용하는 자료형이다.

배열(Array)의 기능 및 연결 리스트와 유사한 기능하다.

테이블이라고도 불린다.

 

 

 

리스트 초기화

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

대괄호[ ] 안에 원소를 넣는다.

쉼표로 원소 구분한다.

 

list( )  

[ ]

비어 있는 리스트를 선언한다.

 

print(a[3])

리스트 원소에 접근할 때 인덱스 값 괄호에 넣는다.

 

n = 10

a = [0] * n

(출력 : [0,0,0,0,0,0,0,0,0,0] )

크기가 N이고, 모든 값이 0인 1차원 리스트(크기 1인 리스트) 초기화.

 

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

a[4] = 5

(출력 : [1,2,3,4,5] )

특정 값을 바꿀 때, 특정 인덱스값 접근한다.

 

 

 

리스트의 인덱싱과 슬라이싱

인덱싱 : 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것이다.

파이썬은 양의 정수, 음의 정수 모두 사용 가능하다.

음의 정수 : 거꾸로 탐색한다.

a[-1] : 뒤에서 첫 번째 원소 출력

 

슬라이싱 : 연속적인 위치를 갖는 원소들을 가져온다.

대괄호 안에 콜론(:) 넣어서 시작 인덱스, 끝 인덱스 설정한다.

끝 인덱스 : 실제 인덱스 보다 1 크게 설정한다.

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

a[1 : 4] : 2번째 원소부터 4번째 원소까지

(출력 : [2,3,4])

 

 

 

리스트 컴프리헨션

리스트 초기화 방법이다.

대괄호 안에 조건문, 반복문 적용하여 리스트 초기화 한다.

간결하고 짧게 작성 가능하다.

 

#0부터 9까지 수의 리스트

array = [ i for i in range(10) ]

range(10) : i의 값이 0~9까지 매번 증가할 때마다

i의 값을 원소로 적용해서 리스트를 만든다.

 

만드는 순서

1. a = [ ] : 리스트 만든다

2. a = [ for ] : 반복문 넣는다

3. a = [ for i in range(10) ] : 범위를 정한다, 0~9

4. a = [ i for i in range(10) ] : 그 원소를 리스트로 적용한다

 

#0부터 19까지 수 중에서 홀수만 포함하는 리스트

array = [ i for i in range(20) if i % 2 ==1 ]

조건문 추가할 수 있다.

 

#1부터 9까지 수들의 제곱 값을 포함하는 리스트

array = [ i * i for i in range(1, 10) ]

(출력 : [1,4,9,16,25,36,49,64,81] )

 

리스트 컴프리헨션과 일반적인 코드 비교하기

리스트 컴프리헨션

#0부터 19까지 수 중에서 홀수만 포함하는 리스트

array = [ i for i in range(20) if i % 2 ==1 ]

 

일반적인 코드

#0부터 19까지 수 중에서 홀수만 포함하는 리스트

array = []

for i in range(20);

    if i % 2 == 1;

        array.append(i)

 

2차원 리스트를 초기화할 때 효과적이다.

N X M 크기 2차원 리스트 한번에 초기화

좋은 예시 : array = [ [0] * m for _ in range(n) ]

n번 반복할때마다 길이가 m인 리스트를 초기화 한다.

잘못된 예시 : array = [ [0] * m ] * n

리스트 자료형 이용해서 변숫값을 할당하면 -> 리스트는 객체 형태로 인식 -> 별도의 주소값 가진다.

잘못된 예시처럼하면 단순히 참조값을 복사하는 것과 같다. -> 전체 리스트 안에 리스트가 같은 객체로 인식된다. -> 특정 인덱스의 값 변경하면 전체가 변경된다.

 

 

 

언더바는 언제 사용?

파이썬에서는 반복을 수행하되, 반복을 위한 변수의 값을 무시고자 할 때 언더바 사용한다.

#1부터 9까지 자연수 더하기

summary = 0

for i in range(1, 10);

    summary +=i

 

#"Hello World"를 5번 출력하기

for _ in range(5);

 

 

 

리스트 관련 기타 메서드

함수명 사용법 설명 시간복잡도
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)

a = [1,2,3,4]

a.insert(2, 3) 

(출력 : [1,2,3,3,4] )

a.count(3)

(출력 : 2 )

 

리스트에서 특정값을 가지는 원소 모두 제거

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 ]

a라는 리스트를 i라는 원소가 하나씩 확인하면서,

i라는 원소가 remove_set에 포함되지 않는다면,

그 원소만 남겨 놓는다.

=3, 5가 아닌 값들만 남겨서 리스트로 만든다

 

 

 


문자열 자료형

문자열 변수 초기화할 때, 큰따옴표 " 작은 따옴표 ' 모두 이용가능하다.

-전체가 큰따옴표 -> 내부는 작은 따옴표 

-전체가 작은 따옴표 -> 내부는 큰따옴표

-백슬래시 \사용하면 원하는 만큼 큰/작은 따옴표 포함 가능

data = "Don't you know \"Python\"?"

 

문자열 연산

문자열 변수에 덧셈(+)이용하면, 문자열이 더해져서 연결된다.

문자열 변수를 양의정수로 곱(x)하면, 문자열이 여러번 더해진다.

문자열도 인덱싱, 슬라이싱 이용 가능하다.

-문자열은 특정 인덱스의 값 변경 못한다.

a = "Hello"

b = "World"

print( a + " " + b)

(출력 : Hello World ) " "는 공백이다

 

 

 


튜플 자료형

튜플 자료형은 리스트와 유사하지만 문법적 차이가 있다.

-튜플은 한 번 선언된 값을 변경할 수 없다

-튜플은 소괄호 () 이용한다.

튜플은 기능제한적이기에, 공간 효율적이다.

a = (1,2,3,4,5,6,7,8,9)

#4번째 원소 출력

a[3]

#2번째 원소부터 4번째 원소까지

a[1 : 4]

#특정 값 변경

a[2] = 7 --에러--

 

튜플 사용하면 좋은 경우

서로 다른 성질데이터 묶어서 관리할 때

-(학번, 성적), 최단 경로 알고리즘의 (비용, 노드 번호)의 형태로 튜플 자료형 사용한다.

데이의 나열을 해싱(Hashing)의 키 값으로 사용할 때

-튜플은 변경이 불가능하므로 키값으로 사용가능하다. 리스트는 불가능하다.

리스트보다 메모리 효율적으로 사용해야 할 때

 

 

 


사전 자료형

사전 자료형은 키(key)와 값(value)의 쌍을 데이터로 가지는 자료형이다.

-리스트, 튜플이 값을 순차적으로 저장하는 것과 대비된다.

사전 자료형은 원하는 '변경 불가능한(immutable) 자료형'을 키로 사용할 수 있다.

파이썬의  사전 자료형은 해시 테이블(Hash Table)을 이용하므로,

데이터 조회 및 수정에 있어서 O(1)의 시간에 처리 가능하다. = 상수시간, 리스트보다 훨씬 빠르게 조회 가능하다.

 

#dict() 이용해서 초기화

data = dict() 

 

#특정한 키에 값 할당한다.

data[ '사과' ] = 'Apple' : 대괄호 [ ]안에 key 넣어준다

data[ '바나나' ] = 'Banan'

data[ '코코넛' ] = 'Coconut'

(출력 : {'사과' : 'Apple', '바나나' : 'Banana', '코코넛' : 'Coconut'}  )

 

#한 번에 키에 값을 할당한다, 중괄호 이용한다

a = {

    '사과' : 'Apple',

    '바나나' : 'Banana',

    '코코넛' : 'Coconut'

}

 

#key를 통해 value값 있는지 확인한다.

if '사과' in data

 

#특정 key의 value를 찾는다

print( a['사과'] )

(출력 : Apple )

 

 

사전 자료형 관련 메서드

키와 값 별도로 뽑아내기 위한 메서드 지원한다.

-키 데이터만 뽑아서 리스트 : keys()함수

-값 데이터만 뽑아서 리스트 : values()함수

 

#키 데이터 담은 리스트

key_list = data.keys()

(출력 : dict_keys(['사과', '바나나', '코코넛'])  )

key_list = list( data.keys()

(출력 : ['사과', '바나나', '코코넛']  ) 리스트 형태로 변환해준다

 

#값 데이터 담은 리스트

value_list = data.vaules()

(출력 : dict_values(['Apple', 'Banana', 'Coconut']) )

 

#각 키에 따른 값을 하나씩 출력

for key in key_list;    각각의 key가 key_list를 조회하게 만든다

    print( data[key] )

(출력 : Apple Banana Coconut )

 

 

 


집합 자료형

집합 자료형은 중복을 허용하지 않고, 순서가 없다.

집합은 리스트 or 문자열 이용해서 초기화한다.

-이때 set()함수 이용한다.

혹은 중괄호 { } 안에 원소를 콤마 , 로 구분하여 삽입해서 초기화 한다.

데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리 가능하다. = 상수시간, 리스트보다 훨씬 빠르게 조회 가능하다.

 

#집합 자료형 초기화 방법1

data = set([1,1,2,3,4,4,5])  

(출력 : {1,2,3,4,5} )  중복되는 원소들 제거 

 

#집합 자료형 초기화 방법2 중괄호 사용

data = {1,1,2,3,4,4,5}

 

 

집합 자료형의 연산

합집합 : 집합A에 속하거나 집합B에 속하는 원소로 이루어진 집합 =OR

교집합 : 집합A에 속하고 집합B에 속하는 원소로 이루어진 집합 =AND

차집합 : 집합A의 원소 중에서 집합B에 속하지 않는 원소로 이루어진 집합 =MINUS 

 

a = set([1,2,3,4,5])

b = set([3,4,5,6,7])

#합집합

a | b

#교집합

a & b

#차집합 

a - b

 

 

집합 자료형 관련 함수

data = set([1,2,3])

#새로운 원소 추가

data.add(4)

#새로운 원소 여러개 추가

data.update([5,6])

#특정한 값 갖는 원소 삭제

data.remove(3)

 

 

사전 자료형과 집합 자료형의 특징

순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.

-사전의 키, 집합의 원소를 이용해서 O(1)의 시간 복잡도로 조회한다.

-키와 원소의 값은 변경불가능한 문자열, 튜플 사용한다.