-
[PlayData - Day 2] 파이썬 변수 타입[플레이데이터] 2022. 12. 20. 11:44
1. K-Digital Training 과정
- 빅데이터 기반 지능형SW 및 MLOps 개발자 양성과정 19기 (Day 2)
2. 목차
- 주피터 노트북 기본 경로 설정
- 문자열
- 리스트
- 튜플
- 세트
- 리스트, 튜플, 세트 간 타입 변환
- 딕셔너리
3. 수업 내용
1. 주피터 노트북 기본 경로 설정
- Jupyter Notebook의 속성에서 경로 지정 (* 관리자 권한 = '예')
Jupyter Notebook 파일 위치 열기 오른쪽 클릭 후 속성 클릭 맨 마지막 따옴표("") 안의 내용을 원하는 경로로 변경 2. 문자열 연산: 더하기, 곱하기
- 여러 문자열을 더하면 나란히 나열된다.
- 문자열에 숫자를 곱하면 곱한 숫자만큼 나열된다.
a = 'Enjoy ' b = 'python!' c = a + b print(c) print(a*3) > Enjoy python! > Enjoy Enjoy Enjoy
3. 리스트: 데이터를 한꺼번에 처리하기 위해 묶어둔다.
student1 = [90, 95, 85, 80] student1 > [90, 95, 85, 80]
- 리스트 내부 데이터의 위치는 0부터 시작한다.
student1[0] > 90
- 리스트 내의 각 데이터를 변경할 수 있다.
student1[1] = 97 student1 > [90, 97, 85, 80]
- 리스트 내에 문자열 또한 할당할 수 있다.
myFriends = ['James', 'Robert', 'Lisa', 'Mary'] myFriends[2] # 세번째 문자열 출력 > 'Lisa' myFriends[-1] # 마지막 문자열 출력 > 'Mary'
- 다양한 타입의 데이터를 혼합해서 리스트에 포함할 수 있다.
mixedList = [0, 2, 3.14, 'python', 'program', True, myFriends] mixedList > [0, 2, 3.14, 'python', 'program', True, ['James', 'Robert', 'Lisa', 'Mary']]
- 리스트를 더할 수 있다(연결할 수 있다).
list_con1 = [1,2,3,4] list_con2 = [5,6,7,8] list_con = list_con1+list_con2 #리스트 연결 print(list_con) > [1, 2, 3, 4, 5, 6, 7, 8]
- 리스트를 곱하면 하나의 리스트 안에서 데이터가 반복된다.
list_con = list_con1 * 3 list_con > [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
- 리스트 중 일부 항목 가져오기
list_data = [0,1,2,3,4,5,6,7,8,9] print(list_data) # == list_data[0:10:1] print(list_data[0:3]) print(list_data[4:8]) print(list_data[:3]) print(list_data[7:]) print(list_data[::2]) > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > [0, 1, 2] > [4, 5, 6, 7] > [0, 1, 2] > [7, 8, 9] > [0, 2, 4, 6, 8] list_data2 = [1,2,3,4,5,6,7,8,9,0] print(list_data2[2::3]) > [3, 6, 9]
- 리스트에서 항목 삭제하기
print(list_data) del list_data[6] print(list_data) > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > [0, 1, 2, 3, 4, 5, 7, 8, 9]
- 리스트에서 항목의 존재 여부 확인하기: Bool 형태로 반환된다
list_data1 = [1,2,3,4,5] print(5 in list_data1) print(6 in list_data1) > True > False
- 리스트 메서드 활용하기
print(myFriends) myFriends.append('Thomas') #리스트에서 항목 하나를 마지막에 추가 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['James', 'Robert', 'Lisa', 'Mary', 'Thomas'] myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) myFriends.insert(1,'Paul') #리스트에서 특정 항목에 삽입 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['James', 'Paul', 'Robert', 'Lisa', 'Mary'] myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) myFriends.extend(['Laura', 'Betty']) # 항목 여러개를 마지막에 추가 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['James', 'Robert', 'Lisa', 'Mary', 'Laura', 'Betty'] myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) myFriends.remove('James') # 첫번째로 일치하는 항목을 리스트에서 제외 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['Robert', 'Lisa', 'Mary'] myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) popFriends = myFriends.pop() # 마지막 항목을 리스트에서 제거하고, 해당 항목 반환 print(myFriends) print(popFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['James', 'Robert', 'Lisa'] > Mary myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) indexFriend = myFriends.index('Lisa') # Lisa가 리스트의 어느 위치에 있는지 확인 print(indexFriend) > ['James', 'Robert', 'Lisa', 'Mary'] > 2 myFriends = ['James', 'Robert', 'Lisa', 'Mary', 'Lisa'] print(myFriends) LisaCount = myFriends.count('Lisa') # Lisa가 몇명인지 카운트 print(LisaCount) > ['James', 'Robert', 'Lisa', 'Mary', 'Lisa'] > 2 myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) myFriends.sort() # 리스트 정렬 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['James', 'Lisa', 'Mary', 'Robert'] myFriends = ['James', 'Robert', 'Lisa', 'Mary'] print(myFriends) myFriends.reverse() # 리스트 순서를 거꾸로 정렬 print(myFriends) > ['James', 'Robert', 'Lisa', 'Mary'] > ['Mary', 'Lisa', 'Robert', 'James']
4. 튜플: 리스트와 유사하지만 항목 변경이 불가능한 타입
tuple1 = (1,2,3,4) tuple1 > (1, 2, 3, 4) tuple1[1] > 2
- 소괄호를 넣지 않아도 생성이 가능하다.
tuple2 = 5,6,7,8 print(tuple2, "/", type(tuple2)) > (5, 6, 7, 8) / <class 'tuple'>
- 인자가 1개인 튜플 생성: 데이터 뒤에 콤마(,)가 필수
tuple3 = (9,) # 반드시 쉼표가 들어가야 tuple이 된다. tuple4 = 10, tuple5 = (9) # 쉼표를 쓰지 않으면 숫자로 입력된다. print(tuple3, "/", tuple4, "/", tuple5, "==", type(tuple5)) > (9,) / (10,) / 9 == <class 'int'>
- 튜플 다루기: 튜플은 변경 및 삭제가 불가능하다
tuple6 = (1,2,3,4) tuple6[1] = 5 # 한번 생성된 튜플의 요소는 변경되지 않음 > TypeError: 'tuple' object does not support item assignment del tuple6[1] # 한번 생성된 튜플의 요소는 삭제되지 않음 > TypeError: 'tuple' object doesn't support item deletion
- 변경 이외의 메서드는 리스트와 사용방법이 동일하다
tuple7 = ('a','b','c','d','e','f') indextuple = tuple7.index('c') print(indextuple) > 2
- 리스트보다 튜플을 사용하는 경우?
- 메모리가 덜 든다! == 코드가 더 효율적으로 돌아간다!
- 특히 빅데이터로 갈수록 효율적인 코드가 중요해진다.
- 중요하고 변경되지 않을 필요가 있는 리스트를 튜플로 입력한다.
5. 세트: 중복이 없는 리스트 타입
- 세트는 {중괄호}로 표기
set1 = {1,2,3} set1a = {1,2,3,3} print(set1) print(set1a) > {1, 2, 3} > {1, 2, 3}
- 세트의 교집합, 합집합, 차집합 구하기
A = {1,2,3,4,5} # Set A B = {4,5,6,7,8,9,10} # Set B A.intersection(B) # 집합 A에 대한 집합 B의 교집합(A∩B) > {4, 5} A.union(B) # 집합 A에 대한 집합 B의 합집합(A∪B) > {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} A.difference(B) # 집합 A에 대한 집합 B의 차집합(A-B) > {1, 2, 3}
- 연산자로 쉽게 표현할 수 있다
A = {1,2,3,4,5} # Set A B = {4,5,6,7,8,9,10} # Set B A & B # A와 B 모두에서 참인 값 > {4, 5} A | B # A 또는 B에 속한 값 > {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} A - B # A에서 B를 제외한 값 > {1, 2, 3}
6. 리스트, 튜플, 세트 간 타입 변환
- list(), tuple(), set()은 서로 변환 가능
a = [1,2,3,4,4] print(a, type(a)) > [1, 2, 3, 4, 4] <class 'list'> # 튜플로 변환 b = tuple(a) print(b, type(b)) > (1, 2, 3, 4, 4) <class 'tuple'> # 세트로 변환 c = set(a) print(c, type(c)) > {1, 2, 3, 4} <class 'set'> # 리스트로 변환 print(list(b), list(c)) > [1, 2, 3, 4, 4] [1, 2, 3, 4]
7. 딕셔너리: 키와 값으로 이루어진 리스트 타입
- 딕셔너리
1. 중괄호로 표현한다.
2. 키(key)와 값(value)으로 나누어져 있다.
3. 인덱스 대신 키 값을 사용한다. 딕셔너리[키]country_capital = {"영국":"런던","프랑스":"파리", "스위스":"베른", "호주":"멜버른","덴마크":"코펜하겐"} print(country_capital, type(country_capital)) > {'영국': '런던', '프랑스': '파리', '스위스': '베른', '호주': '멜버른', '덴마크': '코펜하겐'} <class 'dict'> # 값(Value) 구하기 country_capital['영국'] > '런던' # 위치 값이 아닌, 키(key) 값으로 호출한다. dict_data1 = {1:'버스', 3:'비행기', 4:'택시', 5:'자전거'} dict_data1 > {1: '버스', 3: '비행기', 4: '택시', 5: '자전거'} dict_data1[3] > '비행기'
- 다양한 형태의 딕셔너리가 가능하다
# 키와 값이 모두 숫자일 경우 dict_data2 = {1:10, 2:20, 3:30, 4:40, 5:50} print(dict_data2) print(dict_data2[4]) > {1: 10, 2: 20, 3: 30, 4: 40, 5: 50} > 40 # 키는 문자열, 값은 리스트인 경우 dict_data3 = {"list_data1":[11,12,13], "list_data2":[21,22,23]} print(dict_data3) print(dict_data3["list_data2"]) > {'list_data1': [11, 12, 13], 'list_data2': [21, 22, 23]} > [21, 22, 23] # 다양한 형태를 가지고 있는 딕셔너리 mixed_dict = {1:10, 'dict_num':{1:10, 2:20}, "dict_list_tuple":{"A":[11,12,13], "B":(21,22,23)}, "dict_string":"이것은 책입니다."}
- 딕셔너리 다루기: 데이터 추가, 변경, 삭제
country_capital["독일"] = "베를린" # 추가 country_capital > {'영국': '런던', '프랑스': '파리', '스위스': '베른', '호주': '멜버른', '덴마크': '코펜하겐', '독일': '베를린'} country_capital["호주"] = "캔버라" # 변경 country_capital > {'영국': '런던', '프랑스': '파리', '스위스': '베른', '호주': '캔버라', '덴마크': '코펜하겐', '독일': '베를린'} del country_capital["덴마크"] # 삭제 country_capital > {'영국': '런던', '프랑스': '파리', '스위스': '베른', '호주': '캔버라', '독일': '베를린'}
- 딕셔너리 메서드 활용하기
fruit_code = {"사과":101, "배":102, "딸기":103, "포도":104, "바나나":105} print(fruit_code.keys(), type(fruit_code.keys())) # 딕셔너리에서 키 전체를 리스트 형태로 변환 print(fruit_code.values(), type(fruit_code.values())) # 딕셔너리에서 값 전체를 리스트 형태로 반환 print(fruit_code.items(), type(fruit_code.items())) # 키와 값을 (키, 값)처럼 튜플 형태로 반환 > dict_keys(['사과', '배', '딸기', '포도', '바나나']) <class 'dict_keys'> > dict_values([101, 102, 103, 104, 105]) <class 'dict_values'> > dict_items([('사과', 101), ('배', 102), ('딸기', 103), ('포도', 104), ('바나나', 105)]) <class 'dict_items'> # 데이터 추가 fruit_code2 = {"오렌지":106, "수박":107} fruit_code.update(fruit_code2) fruit_code > {'사과': 101, '배': 102, '딸기': 103, '포도': 104, '바나나': 105, '오렌지': 106, '수박': 107} # 데이터 삭제 fruit_code2.clear() # 안에 있던 데이터가 사라지는 것이지, 변수가 사라지는 것은 아님 print(fruit_code2, type(fruit_code2)) > {} <class 'dict'>
'[플레이데이터]' 카테고리의 다른 글
[PlayData - Day 5] 함수 (0) 2022.12.26 [PlayData - Day 4] 입력과 출력 (0) 2022.12.22 [PlayData - Day 3] if 제어문, for / while 반복문 (1) 2022.12.21 [PlayData - Day1] 과정 개요와 Python 기초 (0) 2022.12.19 [PlayData] 데이터 사이언스 부트캠프 - 데이터 엔지니어링 트랙 (0) 2022.12.19