뚝딱햄 탈출기

[Python] 자료형 (데이터 타입, data type) : number, list, string, tuple, dictionary, set 본문

Programming language/Python

[Python] 자료형 (데이터 타입, data type) : number, list, string, tuple, dictionary, set

hyrmzz1 2023. 10. 2. 21:23
이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저
APPENDIX A. 코딩 테스트를 위한 파이썬 문법 정리 내용

 

파이썬의 자료형은 C/C++, Java와 같은 다른 언어에서 사용되는 기본 자료형을 제공할 뿐만 아니라,
사전 자료형, 집합 자료형 등 강력한 기능을 제공하는 자료형을 기본으로 내장하고 있어 매우 편리하다.

자료형 (데이터 타입, data type) 종류

  • 수 (Number)
  • 리스트 (List)
  • 문자열 (String)
  • 튜플 (Tuple)
  • 사전 (Dictionary)
  • 집합 (Set)

수 자료형 (Number)

2023.09.30 - [Programming language/Python] - [Python] 수 자료형 Number data type

 

[Python] 수 자료형 Number data type

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저 APPENDIX A. 코딩 테스트를 위한 파이썬 문법 정리 내용 자료형 (데이터 타입, data type) 종류 수 (Number) 리스트 문자열 사전 (Dictionary) 집합 (

hyrmzz1.tistory.com

 

리스트 자료형 (List)

2023.10.01 - [Programming language/Python] - [Python] 리스트 자료형 List data type

 

[Python] 리스트 자료형 List data type

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저 APPENDIX A. 코딩 테스트를 위한 파이썬 문법 정리 내용 자료형 (데이터 타입, data type) 종류 수 (Number) 리스트 (List) 문자열 (String) 사전 (Dict

hyrmzz1.tistory.com

 

문자열 자료형 (String)

문자열 초기화

큰따옴표("")나 작은따옴표('') 안에 문자열을 작성한다.

문자열 안에 큰따옴표나 작은따옴표가 포함되어야 하는 경우,

 

  • 문자열을 큰따옴표(or 작은따옴표)로 구성한다면 내부적으로 작은따옴표(or 큰따옴표)를 이용할 수 있다.
  • 문자열을 큰따옴표(or 작은따옴표)로 구성하는데 내부적으로 큰따옴표(or 작은따옴표)를 이용하려면 따옴표 앞에 백슬래시(\)를 작성해 주면 된다.
data = "Don't you know \"Python\"?"
print(data)	# Don't you know "Python"?"

따옴표로 감싸지 않으면 문자열이 아닌 변수명으로 인식한다.

숫자를 따옴표를 감싸면 문자열으로 인식한다.

a = 3
b = "3"

print(type(a))	# <class 'int'>
print(type(b))	# <class 'str'>

문자열 연산

문자열 변수에 덧셈(+)을 이용하면 단순히 문자열이 더해져 연결되고,

문자열 변수를 양의 정수와 곱하면 그 값만큼 문자열이 여러 번 더해진다. (반복된다.)

a = "Hello"
b = "World"
print(a + " " + b)	# Hello World
print(a, b)	# Hello World
print(a, " ", b)	# Hello   World

c = "String"
print(c * 3)	# c + c + c와 같음. c가 3번 반복. StringStringString

파이썬의 문자열은 내부적으로 리스트와 같이 처리되기 때문에,
문자열 데이터에 대해서도 인덱싱과 슬라이싱을 이용할 수 있다.

(문자열은 여러 개의 문자가 합쳐진 리스트라 볼 수 있다.)

a = "ABCDEF"
print(a[0])	# A
print(a[2 : 4])	# CD

문자열 자료형 관련 함수

문자열을 모두 대문자로 바꾸는 upper() 함수와
특정 문자를 다른 문자로 바꾸는 replace() 함수가 있다.

word1 = hyrmzzi
print(word1.upper())    # 모든 알파벳 대문자로 바꾸기. HYRMZZI
print(word1.replace("i", "1"))  # 특정 문자를 다른 문자로 바꾸기. hyrmzz1

split() 함수

() 안의 문자(= 구분자)를 기점으로 문자열을 나눠 리스트 형태로 저장한다.

괄호 안에 작성한 문자는 저장되지 않는다.

 

파라미터 없이 split() 함수를 사용한다면 (= 구분자 작성 안하면) 띄어쓰기나 개행 문자에 맞춰 문자열을 나눠준다.

email = "ex@gmail.com"

result = email.split("@")   
print(result)	# 리스트 형태로 저장. ['ex', 'gmail.com']

result2 = result[1].split(".")	# 'gmail.com'을 '.'을 기점으로 나눠 result2 변수에 리스트 형태로 저장
print(result2)	# ['gmail', 'com']

result3 = email.split("@")[1].split(".")    # result2와 같음. result 만들지 않고 한번에 출력.
print(result3)

str = "a b c d e"
result4 = str.split()	# 띄어쓰기나 개행 문자를 기점으로 나눔.
print(result4)	# ['a', 'b', 'c', 'd', 'e']

 

튜플 자료형 (Tuple)

파이썬의 튜플 자료형은 리스트와 거의 비슷하나 몇가지 차이점이 있다.

튜플 vs 리스트

  • 튜플은 한 번 선언된 값을 변경할 수 없으나, 리스트는 대입 연산자(=)를 사용해 선언된 값을 변경할 수 있다.
  • 튜플은 소괄호(())를 이용하고, 리스트는 대괄호([])를 이용한다.
  • 튜플은 리스트에 비해 상대적으로 공간 효율적이다.
# 리스트
a = [1, 2, 3, 4]
print(a)	# [1, 2, 3, 4]
a[2] = 7
print(a)	# [1, 2, 7, 4]

# 튜플
b = (1, 2, 3, 4)	# 소괄호 이용해 초기화
print(b)	# (1, 2, 3, 4)
b[2] = 7	# 재할당 불가
print(b)	# 에러 발생! 'tuple' object does not support item assignment

튜플이 어떻게 사용되냐면 ...

튜플은 한 번 선언된 값을 변경할 수 없기 때문에 그래프 알고리즘을 구현할 때 자주 사용된다.

예를 들어 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘의 내부에서는 우선순위 큐를 이용하는데,
해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않기 때문에 우선순위 큐에 들어가는 데이터를 튜플로 구성해 소스코드를 작성한다.

 

또한 일반적으로 각 원소의 성질이 서로 다를 때 주로 사용하기 때문에
다익스트라 최단 경로 알고리즘에서 '비용'과 '노드 번호'라는 서로 다른 성질의 데이터를 (비용, 노드 번호)의 형태로 함께 튜플과 묶어 관리하는 것이 관례이다.

 

사전 자료형

키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형으로, 사전 자료형이 사용되는 대표적인 예시는 사전(Dictionary)이다.

리스트와 튜플은 값을 순차적으로 저장해 a라는 리스트와 b라는 튜플에 대한 첫 번째 원소는 a [0], b(0)을 통해 데이터에 접근할 수 있으나, 사전은 Key 값을 통해 데이터에 접근할 수 있다.

data = dict()	# 초기화
data['사과'] = 'Apple'	# Key: 사과, Value: Apple
data['바나나'] = 'Banana'	# Key: 바나나, Value: Banana
data['코코넛'] = 'Coconut'	# Key: 코코넛, Value: Coconut

print(data)	# {'사과' : 'Apple', '바나나' : 'Banana', '코코넛' : 'Coconut'}
print(data['사과'])	# 'Apple'. [] 안에 Key 값을 넣어 Value를 얻을 수 있다.
print(data['Apple'])	# 에러 발생. Key Error.

리스트와 튜플과는 다르게 사전 자료형은 키-값 쌍을 데이터로 가진다는 점에서, 변경 불가능한 데이터를 키로 사용할 수 있다.

변경 불가능한 자료형이란 수 자료형, 문자열 자료형, 튜플 자료형과 같이 한 번 초기화되면 변경이 불가능한 자료형으로, 흔히 사용되지는 않으나 튜플 자료형이 사전 자료형의 키로 사용되기도 한다.

 

파이썬의 사전 자료형은 내부적으로 '해시 테이블'을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어 O(1)의 시간에 처리할 수 있고, 키-값 쌍으로 구성된 데이터를 처리함에 있어 리스트보다 훨씬 빠르게 동작한다.

사전이 어떻게 사용되냐면...

사전 자료형은 코딩 테스트에서 자주 사용될 수 있다.

특정 원소가 있는지 검사할 때 사전을 사용하면 문제 풀이가 간결해진다.

 

예를 들어 학생의 번호가 1부터 10,000,000까지로 구성되어 있는 상황에서 최대 10,000명의 학생을 선택했다고 가정하고, 특정 학생 번호가 주어졌을 때 해당 학생의 선택 여부를 확인하려면 어떻게 해야 할까?

리스트를 이용한다면 1부터 10,000,000까지의 각 번호가 선택되었는지를 저장할 수 있는 리스트를 만들어야 하고, 천만 개의 데이터 중 999만 개가량의 데이터는 쓰이지 않을 것이므로 많은 메모리 공간이 낭비된다.

하지만 사전을 이용한다면 천만 개의 데이터를 담을 필요가 없으며 10,000개의 데이터만 사전 자료구조에 들어가므로 훨씬 적은 메모리 공간을 사용할 수 있다.

in 문법

in 문법을 통해 사전 자료형에 특정 원소가 있는지 검사할 수 있다.

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

if '사과' in data:	# '원소 in 사전'의 형태로 사용
	print("'사과'를 키로 가지는 데이터가 존재합니다.")	# 문자열이 출력된다.

in 문법은 interable 자료형에 모두 사용이 가능하다.

interable 자료형은 리스트, 문자열, 튜플 등 순차적인 정보를 담는 자료형이다.

사전 자료형 관련 함수

대표적으로 키와 값을 별도로 뽑아내기 위한 함수가 있다.

키 데이터만을 뽑아 리스트로 이용할 땐 keys() 함수를, 값 데이터만을 뽑아 리스트로 이용할 땐 values() 함수를 이용한다.

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

# 키 데이터만 담은 리스트
key_list = data.keys()
# 값 데이터만 담은 리스트
value_list = data.values()

print(key_list)	# dict_keys(['사과', '바나나', '코코넛'])
print(value_list)	# dict_values(['Apple', 'Banana', 'Coconut'])

# 각 키에 따른 값을 하나씩 출력
for key in key_list:
	print(data[key])
'''
출력 결과
Apple
Banana
Coconut
'''

 

집합 자료형 (Set)

기본적으로 리스트 혹은 문자열을 이용해 집합을 만들 수 있다.

집합은 중복을 허용하지 않으며 순서가 없다.

리스트나 튜플은 순서가 있어 인덱싱을 통해 자료형의 값을 얻을 수 있는 반면에, 사전과 집합은 순서가 없어 인덱싱으로 값을 얻을 수 없다.

사전과 다르게 집합은 키(Key)가 존재하지 않고 값(Value) 데이터만을 담는다.

 

사전 자료형과 마찬가지로 특정 원소가 존재하는지 검사하는 연산의 시간 복잡도는 O(1)이다.

위의 '사전 자료형이 어떻게 사용되냐면...'에 언급된 문제에서도 집합 자료형이 효과적으로 사용될 수 있다.

집합 초기화

중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분해 넣어 초기화한다.

set() 함수를 이용해 초기화한다면 set() 함수 내부에 대괄호([]) 를 넣고, 각 원소를 콤마(,)를 기준으로 구분하여 작성한다.

# 집합 자료형 초기화 방법 1
data = {1, 1, 2, 2, 3, 4, 5, 5, 5}
print(data)	# 중복 허용 X. {1, 2, 3, 4, 5}

# 집합 자료형 초기화 방법 2
data = set([1, 1, 2, 2, 3, 4, 5, 5, 5])
print(data)	# 중복 허용 X. {1, 2, 3, 4, 5}

집합 자료형의 연산

기본적인 집합 연산으로는 합집합, 교집합, 차집합 연산이 있다.

집합 자료형 데이터 사이에서 합집합을 계산할 때는 '|', 교집합을 계산할 때는 '&', 차집합을 계산할 때는 '-'를 이용한다.

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

print(a | b)	# 합집합.(중복 허용 X) {1, 2, 3, 4, 5, 6}
print(a & b)	# 교집합. {3, 4, 5}
print(a - b)	# 차집합. {1, 2}

집합 자료형 관련 함수

하나에 집합 데이터에 값을 추가하는 add() 함수, 여러 개의 값을 한 번에 추가하는 update() 함수, 특정 값을 제거하는 remove() 함수 등이 있다.

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

# 새로운 원소 추가
data.add(4)
print(data)	# {1, 2, 3, 4}

# 새로운 원소 여러 개 추가
data.update([1, 5, 6])	# update() 안에 [] 사용해 원소 입력.
print(data)	# {1, 2, 3, 4, 5, 6}. 중복 허용 X.

# 특정 값을 갖는 원소 삭제
data.remove(3)
print(data)	# {1, 2, 4, 5, 6}

add(), remove() 함수는 모두 시간 복잡도가 O(1)이다.

Comments