데린이 재영

파이썬(Python) 자료형 이해하기 - Number/String/List/Tuple/Dictionary/Set/Bool 본문

멋사 AI school 7기/TIL

파이썬(Python) 자료형 이해하기 - Number/String/List/Tuple/Dictionary/Set/Bool

재용용 2022. 10. 8. 15:19
자료형은 데이터의 '종류'를 말하며 영어로는 Type이라고 합니다. 정수라면 integer 타입, 실수라면 float 타입, 이름과 같이 문자 형태라면 string 타입 등 데이터 종류에는 여러가지 타입이 있습니다.

목표 설정

- 멋쟁이사자 AI 스쿨 1일차(220919) 학습 내용 정리하기

- 파이썬의 기초인 자료형 (Bool, 숫자, 문자열, 리스트, 딕셔너리, 튜플, 집합) 이해하기

1. 숫자형 (Number)
2. 문자열 자료형 (String)
3. 리스트 자료형 (List)
4. 튜플 자료형 (Tuple)
5. 딕셔너리 자료형 (Dictionary)
6. 집합 자료형 (Set)
7. 불 자료형 (Bool)

1. 숫자형 (Number)

파이썬에서 수는 정수 (int) 와 실수 (float) 로 구분되며 천 단위 구분기호 없이 오로지 숫자로만 구성된 데이터 이다.
- 정수 (interger) : 소수점 이하의 값을 갖지 않는 수 ( 표현 방식 : 부호 없는 정수 / 부호 있는 정수 )
- 실수 (floating-point) : 소수점이 포함된 수 ( 표현 방식: 부호 없는 실수 / 부호 있는 실수 )
# 정수 (integer)
3
-109
# 실수 (floate)
+3.14
0.0

 

📍숫자 연산

파이썬의 숫자는 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산과 제곱, 나누기 연산 후 몫 또는 나머지를 구할 수 있습니다.
특히, 거듭 제곱(**)은 정수형 상수의 표현 범위는 제한이 없으며, CPU 레지스터로 표현할 수 있는 크기보다 큰 정수를 다룰 때는 연산 속도가 느려집니다.

- 사칙연산 : 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)
- 그 외 연산자 : 제곱(**), 나눗셈 후 몫(//), 나눗셈 후 나머지(%)

** 알아두기 : 나눗셈을 할 때, 정수 / 정수 를 해도 결과는 항상 실수 (float) 로 반환 됨 
** 알아두기 : 덧셈, 뺄셈, 곱셈, 제곱에서 실수를 하나 이상 사용하면 실수형으로 반환 됨

2. 문자열 자료형 (String)

문자열(string)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 문자열이다.

"내 이름은 김삼순"
"The Zen of Python"
'12345'

위 문자열을 보면 모두 따옴표("" 또는 '')로 둘러싸여 있다.
파이썬에서 문자열은 여러 줄의 문장을 처리할 때 백슬래시 문자와 소문자 n을 조합한 \n 이스케이프 코드를 사용합니다.

📍큰 따옴표와 작은따옴표

# 큰 따옴표와 작은 따옴표 같이 쓰기
>>> "멋쟁이사자처럼 'AI 스쿨' 7기" 
멋쟁이사자처럼 'AI 스쿨' 7기

# 역슬래쉬로 구분하기 
>>> '멋쟁이사자처럼 \'AI 스쿨\' 7기'
멋쟁이사자처럼 'AI 스쿨' 7기

# 줄바꿈 문자 표현하기
>>> """멋쟁이사자처럼
AI스쿨
7기""" 
멋쟁이사자처럼\nAI스쿨\n7기

📍문자열 연산

파이썬에서는 문자열을 더하거나 곱할 수 있다. (파이썬만의 장점!!!)
- 문자열 더해서 연결하기(Concatenation) : 문자열 끼리 덧셈 기호(+)를 사용하여 문자열을 연결할 수 있음
- 문자열 곱해서 반복하기 : 문자열과 숫자를 곱셈 기호(*)를 사용하여 문자열을 반복할 수 있음
- 문자열 길이 구하기 : len() 함수를 사용해서 문자열의 총 길이를 구할 수 있음
# 문자열 더하기
>>> a = '점심메뉴 : '
>>> b = '짜장면'
>>> a + b
'점심메뉴 : 짜장면' 

# 문자열 곱하기
>>> '=' * 30
'=============================='

# 문자열 길이 구하기
>>> len("안녕하세요.")
6

 

📍문자열 인덱싱과 슬라이싱

파이썬에서 문자열을 인덱싱, 슬라이싱으로 원하는 부분을 잘라내어 가져올 수 있음
- 인덱싱(Indexing) : 문자열의 인덱스 번호를 사용하여 문자열 안의 특정한 값을 뽑아냄
- 슬라이싱(Slicing) : 문자열의 인덱스 번호를 사용하여 문자열 안의 특정한 부분을 뽑아냄
# 문자열 인덱싱
>>> lunch = '오늘의 점심메뉴는 짜장면입니다.'
>>> lunch[10]
'짜'
>>> lunch[-7]
'짜'

# 문자열 슬라이싱
>>> dinner = '오늘의 저녁메뉴는 오므라이스입니다.'
>>> dinner[10] + dinner[11] + dinner[12] + dinner[13] + dinner[14]
'오므라이스'
>>> dinner[10:14]
'오므라이'

 

📍문자열 포매팅(Formatting) 

문자열 포메팅이란 문자열 안에 어떤 값을 삽입하는 방법이다.

1. format 함수

# 1개의 값 넣기
>>> "오늘 강수확률은 {}% 입니다.".format(0)
'오늘 강수확률은 0% 입니다.'

# 2개 이상의 값 넣기
# .format(21, 11)로 넣어도 됨
>>> "오늘 서울의 최고온도는 {highest}°C 이고, 최저온도는 {lowest}°C입니다.".format(highest=21, lowest=11)
'오늘 서울의 최고온도는 21°C 이고, 최저온도는 11°C입니다.'

2. f-string

>>> f"오늘 서울지역의 최고온도는 {21}도, 최저온도는 {11}도 입니다."
'오늘 서울지역의 최고온도는 21도, 최저온도는 11도 입니다.'

📍문자열 함수 

1. 문자 개수 세기 : .count()
2. 문자 위치 알려주기 : .find() / .index()
3. 문자열 삽입 : .join()
4. 소문자로 변환 : .lower()
5. 대문자로 변환 : .upper()
6. 양쪽 공백 제거 : .strip()
7. 왼쪽 공백 제거 : .lstrip()
8. 오른쪽 공백 제거 : .rstrip()
9. 문자열 바꾸기 : .replace(바뀌게 될 문자열, 바꿀 문자열)
10. 문자열 나누기 : .split()
11. 사용가능한 함수 목록 보기 : dir(변수이름)

3. 리스트 자료형 (List)

리스트는 대괄호로 묶여진 자료형을 말하며 아래 예시와 같은 형태임

** 알아두기 : 대괄호는 리스트, 인덱싱, 슬라이싱에 사용됨

menu = ["짜장면", "짬뽕", "볶음밥", "탕수육", "깐풍기", "유산슬"]
menu_price = [4000, 5000, 5500, 18000, 20000, 30000]
menu_sourses = ["짜장면", ["춘장", "면", "채소", "고기"], "볶음밥", ["쌀", "새우", "채소", "소스"]]

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

# 인덱싱
menu[0]  →  '짜장면'
menu_price[-1]  →  30000

# 슬라이싱
menu[:5]  →  ['짜장면', '짬뽕', '볶음밥', '탕수육', '깐풍기']
menu[::2]  →  ['짜장면', '볶음밥', '깐풍기']
menu_price[::-1]  →  [30000, 20000, 18000, 5500, 5000, 4000]

# 리스트 요소 불러오기
menu_sourses[1][0] →  '춘장'
menu_sourses[3][1] →  '새우'

📍리스트 수정과 삭제

# 리스트 값 수정하기
>>> menu[0] = "짜장"
>>> menu
["짜장", "짬뽕", "볶음밥", "탕수육", "깐풍기", "유산슬"]

# 리스트 값 삭제하기 (del 함수)
>>> del menu[3:]
>>> menu
['짜장', '짬뽕', '볶음밥']

# 리스트 값 삭제하기 (remove 함수)
>>> menu.remove("짬뽕")
>>> menu
['짜장', '볶음밥']

📍리스트 함수

문자열과 마찬가지로 리스트 변수 이름 뒤에 '.'를 붙여 여러 가지 함수를 사용할 수 있음

1. 리스트에 요소 추가 (append) : 리스트 맨 뒤에 값 추가 됨
2. 리스트 정렬 (sort)
3. 리스트 뒤집기 (reverse)
4. 위치 반환 (index) : 리스트 내의 요소 값을 넣으면 그 요소의 인덱스 값을 반환
5. 리스트에 요소 삽입 (insert(a, b))  →  a : 위치, b : 삽입할 요소
6. 리스트 요소 제거 (remove) : 리스트에서 첫 번째로 나오는 요소 삭제
7. 리스트 요소 끄집어내기 (pop) : 리스트의 맨 마지막 요소를 돌려주고, 그 요소 삭제
8. 리스트에 포함된 요소 개수 세기 (count) : 리스트 안에 포함된 개수 반환
9. 리스트 확장 (extend) : 리스트에 리스트를 더함  →  리스트 += [] 와 동일한 기능

4. 튜플 자료형 (Tuple)

튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 차이점은 아래와 같다.
- 리스트는 []로 둘러싸여있지만 튜플은 ()으로 둘러싼다.
- 리스트는 그 값의 생성, 삭제, 수정이 가능하지만, 튜플은 그 값을 바꿀 수 없다.
- 튜플은 콤마(,)가 있다면 괄호를 생략해도 tuple로 저장이 된다.
** 알아둘 점 : 튜플의 요솟값은 한번 정하면, 내부의 값을 바꿀 수 없다.
characters = ('고길동', '둘리', '박희동')
new_characters = ('도우너', '또치', '마이콜')

# 인덱싱하기
characters[0]  →  '홍길동'

# 슬라이싱하기
characters[1:]  →  ('둘리', '박희동')

# 튜플 더하기
characters + new_characters  →  ('고길동', '둘리', '박희동', '도우너', '또치', '마이콜')

# 튜플 곱하기
new_characters * 2  →  ('도우너', '또치', '마이콜', '도우너', '또치', '마이콜')

# 튜플 길이 구하기
len(characters)  →  3

5. 딕셔너리 자료형 (Dictionary)

딕셔너리란? 값에게 이름을 붙여서 매칭시켜주는 것이다.
앞에서 배운 리스트, 튜플의 각 요소들은 어떤 값인지 알 수 없다.
하지만, 딕셔너리의 key : value 를 이용하면 값이 어떤 의미를 가지는지 알 수 있다.
형식 : {키 : 값} 으로, 아래와 같이 사용할 수 있다.
** 알아둘 것 : 딕셔너리에서 key는 고유한 값으로, 중복된 값을 포함하면 안된다. (중복시, 맨 뒤에 적힌 key:value 값만 살아남음)

1. 딕셔너리 만들기

menu = {"짜장면": 4000, "짬뽕": 5000, "탕수육":15000}​

 

2. 딕셔너리에 쌍을 추가, 삭제하기

>>> menu["유산슬"] = 30000
>>> menu
{'짜장면': 4000, '짬뽕': 5000, '탕수육': 15000, '유산슬': 30000}
>>> del menu["탕수육"]
>>> menu
{'짜장면': 4000, '짬뽕': 5000, '유산슬': 30000}

 

📍딕셔너리 함수

1. Key 리스트 만들기 (keys)

>>> menu.keys()
dict_keys(['짜장면', '짬뽕', '유산슬'])​
>>> list(menu.keys())
['짜장면', '짬뽕', '유산슬']

 2. Value 리스트 만들기 (valuse)

>>> menu.values()
dict_values([4000, 5000, 15000])
>>> list(menu.values())
[4000, 5000, 15000]​

 3. Key, value 쌍 얻기 (items)

>>> menu.items()
dict_items([('짜장면', 4000), ('짬뽕', 5000), ('탕수육', 15000)])
>>> list(menu.items())
[('짜장면', 4000), ('짬뽕', 5000), ('탕수육', 15000)]

 4. Key: Value 쌍 다 지우기 (clear)

>>> menu.clear()
>>> menu
{}​

 5. Key로 Value 얻기 (get)

>>> dict_num = {"고길동" : 1, "둘리" : 2, "희동" : 3, "도우너" : 4}
>>> dict_num.get("고길동")
1

6. Key 유무 확인 (in)

>>> "또치" in dict_num
False
>>> "도우너" in dict_num
True

6. 집합 자료형 (set)

집합 자료형은 순서가 없고, 중복을 허용하지 않는다는 특징이 있다.
- 리스트와 튜플은 순서가 있기 때문에 입력해준 값 대로 정렬되는데, 집합은 뒤죽박죽으로 정렬된다.
- 리스트와 튜플은 중복된 값을 포함할 수 있지만, 집합은 중복된 값은 스스로 필터링한다.
** 알아둘 것 : 순서가 없는 자료형이기 때문에 인덱싱을 사용하려면, 리스트나 튜플 형태로 변환 후 사용해야 함
>>> order_list = ["짜장면", "탕수육", "짬뽕", "짜장면", "볶음밥"]
>>> order_set = set(order_list)
>>> order_set
{'볶음밥', '짜장면', '짬뽕', '탕수육'}

📍교집합, 합집합, 차집합

1. 교집합 (&) : 두 집합의 교집합 값 반환
2. 합집합 (|) : 두 집합의 전체 값 반환 (중복된 값은 하나씩 반환)
3. 차집합 (-) : 두 집합의 차집합 값 반환

📍집합 함수

문자열과 마찬가지로 집합 변수 이름 뒤에 '.'를 붙여 여러 가지 함수를 사용할 수 있음
1. 값 1개 추가 (add) : 한개의 값 추가 (순서 무작위로 들어감)
2. 값 여러 개 추가 (update) : 리스트 또는 튜플 형태로 여러 개의 요소 추가 (순서 무작위로 들어감)
3. 특정 값 제거 (remove) : set 자료형에 들어가있는 특정 값 제거

7. 불 자료형 (Bool)

불(bool) 자료형이란 참(True)과 거짓(False)를 나타내는 자료형으로, True와 False 값만 가질 수 있다.
- True : 참 ( True == 1 )
- False : 거짓 ( False == 0 )

** 조건문이나 반복문에 사용할 때 주의하기

 


💡 오류 파악하기

 (i) 천단위 구분 기호(,)를 포함하면 ?

  • 오류 메시지 중 TypeError 는 자료형이 맞지 않거나 함수 호출 규약이 틀리면 발생하는 오류로, 데이터 유형과 관련된 오류라는 뜻
  • type() takes 1 or 3 arguments : type 함수에 1개 또는 3개의 arguments를 담아야 함 
  • 위 코드에선 3과 000이라는 두개의 전달 인자가 입력되었기 때문에 발생한 것으로 보임
  • type의 Docstring을 보면 아래와 같음
    • type(object) -> 1개의 전달인자 입력 시, 입력한 object의 type을 알려줌
    • type(name, bases, dict, **kwds) -> 3개의 전달인자 입력 시, 새로운 타입 반환

(ii) 숫자와 문자열을 더하면 ?

  • 오류 메세지 중 TypeError는 자료형이 맞지않거나 함수 호출 규약이 틀리면 발생한다는 것을 배웠습니다.
  • Can only concatenate str (not "int") to str 라는 오류는 str만 str에 연결할 수 있다는 뜻입니다.
  • 즉, str엔 str 형태만 연결시킬 수 있지만 type이 int인 3000을 연결시켜서 난 오류입니다.

💡 인덱스 값 이해하기

  • [:] 슬라이싱 기호를 사용할 때, [start:end:step] 임을 알자
  • 슬라이싱 기호를 사용할 때, end는 슬라이싱을 끝낼 위치로 end는 포함하지 않음을 알아두자 ('오므라이' = [10:14])

참고문헌

- https://wikidocs.net/11

- https://docs.python.org/ko/3/tutorial/introduction.html#

- https://twpower.github.io/119-python-list-slicing-examples

- https://jfine-python-classes.readthedocs.io/en/latest/type-name-bases-dict.html

 

Comments