새로운 파일을 만들어서 진행해볼게요.
Python version은 3.11로 가상환경을 만들어서 해볼게요.
코드 보고도 모르시겠으면 아래 링크를 참조해주세요.
해야 할 내용
1. Python version 3.11로 가상환경 설정
py 3.11 -m venv .venv
2. 가상환경에서 pip upgrade 후 jupyter 설치
.\.venv\Scripts\activate
py -m pip install --upgrade pip
py install jupyter
2024.07.08 - [컴퓨터 공학/Network] - SK networks AI Camp - Python, Git 등 설치
아래의 코드를 입력했을 때 사진과 같이 나오면 docker가 잘 되어있는 거에요.
docker 설치가 궁금하다면 위의 링크를 클릭해서 들어가주세요.
docker --verion
docker images
docker ps
이건 그냥 설정을 해준 거고 이제 Python에 대해 공부해볼게요.
1. 리스트
○ 생성법 : 리스트명 = [요소1, 요소2, 요소3]
※ 보통 리스트명은 lst로 설정을 해줘요.
※ 리스트는 [ 로 열고 ]로 닫아줘요
리스트를 만들고 인덱싱해볼게요
○ a 라는 리스트에 1 부터 5까지 넣고 0번째 인덱스를 출력하는 코드에요.
○ 출력결과는 어떻게 나올까요? 예상하고 코딩을 직접해서 예상해보세요
a = [1, 2, 3, 4, 5]
a[0]
그리고 리스트는 다른 타입을 넣을 수도 있어요
b = [1, 2, 'a', ['b', 'c']]
이런 식으로도 가능해요.
이렇게 했을 때 ['b', 'c']가 들어가서 'b' 나 'c' 만 찾고 싶다면 아래처럼 코딩하면 되요.
print(b[-1][0]) # 'b'
print(b[-1][-1]) # 'c'
리스트도 슬라이싱이 가능해요. 문자열 슬라이싱 하는 것이랑 동일해요.
모르시겠다면 아래 링크를 통해 확인해주세요.
2024.07.09 - [컴퓨터 공학/Network] - SK networks AI Camp - Python 기본(1)
리스트 연산
○ 더하기, 반복하기
리스트끼리 합칠 수도 있고 문자열 출력 반복 처럼 반복할 수도 있어요.
a = [1, 2]
b = [3, 4]
print(a+b) # [1,2,3,4]
print(a * 3) # [1,2,1,2,1,2]
print((a * 2) + (b * 2)) #[1, 2, 1, 2, 3, 4, 3, 4]
○ 길이 구하기
길이를 구하려면 len(리스트명)으로 구할 수 있어요.
a = [1, 2]
print(len(a)) # 2
○ 수정
리스트 수정을 위해 인덱싱하고 바꾸는 방법이 있어요.
a = [1, 2, 3, 4, 5]
a[0] = 0 # a == [0, 2, 3, 4, 5]
a[4] = 7 # a == [0, 2, 3, 4, 7]
a[-2] = 10 # a == [0, 2, 3, 10, 7]
a[2:4] = [9, 11] # 설명 : 2 ~ 4(4번째 포함 X)까지 인덱스를 9, 11로
# ==> a == [0, 2, 9, 11, 7]
a[:3] = [2, 29, 39] # a == [2, 29, 39, 11, 7]
○ 삭제
삭제를 위해서는 del 을 써요. 위에 예제에 이어서 작성해볼게요.
# 현재 a == [2, 29, 39, 11, 7]
del a[0] # a == [29, 39, 11, 7]
del a[-1] # a == [29, 39, 11]
del a[:2] # a == [11]
리스트 함수들
리스트 함수들은 예제로 알아볼게요.
○ append(추가)
a = [1, 2, 3]
a.append(9) # a == [1, 2, 3, 9]
a.append(5) # a == [1, 2, 3, 9, 5]
○ sort(정렬)
# 현재 a == [1, 2, 3, 9, 5]
a.sort() # a == [1, 2, 3, 5, 9]
b = ['c', 'f', 'a', 'b', 'e', 'd']
b.sort() # b == ['a', 'b', 'c', 'd', 'e', 'f']
○ reverse(뒤집기)
# 현재 a == [1, 2, 3, 5, 9]
# 현재 b == ['a', 'b', 'c', 'd', 'e', 'f']
a.reverse() # a == [9, 5, 3, 2, 1]
b.reverse() # b == ['f', 'e', 'd', 'c', 'b', 'a']
○ index(위치)
# a == [9, 5, 3, 2, 1]
# b == ['f', 'e', 'd', 'c', 'b', 'a']
a.index(9) # 0
b.index('e') # 1
a.index(10) # 없는 값을 넣으면 오류 발생
○ count(요소 숫자)
a = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
a.count(1) # 1
a.count(5) # 5
a.count(2) # 2
○ extend(확장)
a와 b가 리스트일 때
● a.append(b) 를 하면 a에 b가 리스트형태로 들어가요.
● a.extend(b) 를 하면 a에 b의 값이 들어가요.
a = [1, 2, 3]
b = [4, 5]
a.append(b) # a == [1, 2, 3, [4, 5]]
a = [1, 2, 3]
b = [4, 5]
a.extend(b) # a == [1, 2, 3, 4, 5]
2. 튜플
튜플 생성
○ 리스트는 [ ]로 둘러싸지만 튜플은 ( ) 로 둘러싸요
○ 리스트는 요소 값의 생성, 삭제, 수정이 되지만 튜플은 요소 값 변경이 안되요.
a = ()
b = (1, ) # 하나일 때는 (1,) 처럼 , 를 찍어줘야해요.
# 중요
# 만약 b = (1) 로 한다면 type(b)로 검색하면 int가 나와요
# ----------------
c = (1, -2, 3 , 14)
d = (1, 'b', 'c')
e = (1, 2, ('a', 'bc')) # 리스트와 마찬가지로 튜플 안에 튜플도 가능해요.
c[0] = 5 # 튜플이라서 수정을 하면 오류 발생
del c[0] = 5 # 튜플이라서 수정을 하면 오류 발생
그러면 수정은 어떻게 해요? 리스트로 변환하여 할 수 있어요
4가지 방법이 있어요.
1) list() 함수 사용
a = (1, 2, 3)
b = list(a)
b.append(4)
b # [1, 2, 3, 4]
2) Unpacking 사용(언패킹 연산자 * 사용)
a = (1, 2, 3, 4, 5)
b = [*a]
b.append(6)
b # [1, 2, 3, 4, 5, 6]
3) List comprehension 사용
a = (1, 2, 3, 4, 5)
b = [x for x in a]
b.append(6)
b # [1, 2, 3, 4, 5, 6]
4) for 문 사용
a = (1, 2, 3, 4, 5)
b = []
for e in a:
b.append(e)
b.append(6)
b # [1, 2, 3, 4, 5, 6]
인덱싱
a = (1, 2, 3, 'a', 'bc')
a[0] # 1
a[-1] # 'bc'
슬라이싱
# a == (1, 2, 3, 'a', 'bc')
a[:2] # (1, 2)
a[::-1] # ('bc', 'a', 3, 2, 1)
튜플 연산
○ 더하기 곱하기
a = (1, 2, 3)
b = ('a', 'b', 'cd')
a + b # (1, 2, 3, 'a', 'b', 'cd')
a + 3 # 튜플은 튜플끼리만 덧셈 가능
a + [2, 3] # 튜플은 튜플끼리
# ---------------------------
a * 2 # 곱하기는 가능 (1, 2, 3, 1, 2, 3)
○ 길이구하기
a = (1, 2, 3, 'a', 'b')
len(a) # 5
b = (1, 2, 3, ('a', 'b'))
len(b) # 4
len(b[3]) # 2
3. 딕셔너리
Key와 Value를 한 쌍으로 갖는 자료형
생성
dic = {'name' : 'hong', 'phone' : '01012345678', 'birth' : 1118}
dic # {'name' : 'hong', 'phone' : '01012345678', 'birth' : 1118}
dic = {'color' : ['red', 'green', 'blue'], 'age' : [10, 20, 30], name : 'hong'}
dic # {'color' : ['red', 'green', 'blue'], 'age' : [10, 20, 30], name : 'hong'}
조회
dic = {
'voc' : {
'a' : 1, 'b' : 2
},
'users' : [
{
'name' : 'name1',
'age' : 20
},
{
'name' : 'name2',
'age' : 30
}
]
}
dic['voc'] # {'a': 1, 'b' : 2}
dic['voc']['b'] # 2
dic['users'][0] # {'name' : 'name1', 'age':20}
dic['users'][1]['age'] # 30
조건 조회
dic = {'a' : 1, 'b': 2, 'c' : 3}
'a' in dic # True
'f' in dic # False
get()
dic = {'a' : 1, 'b': 2, 'c' : 3}
dic['a'] # 1
dic.get('a') # 1
dic['f'] # 없는 key 조회하면 오류
dic.get('f') # 없는 key 조회하면 빈칸 반환
dic.get('f', 'None') # 없는 key 조회하면 None 반환
추가
a = {'a' : 1}
a['b'] = 2 # a == {'a' : 1, 'b' : 2}
a['c'] = [1, 2, 3] # a == {'a' : 1, 'b' : 2, 'c' : [1, 2, 3]}
a['d'] = {'a' : 11, 'b': 22} # a == {'a' : 1, 'b' : 2, 'c' : [1, 2, 3], 'd' : {'a' : 11, 'b' : 22}}
수정
# a == {'a' : 1, 'b' : 2, 'c' : [1, 2, 3], 'd' : {'a' : 11, 'b' : 22}}
a['d'] = [{'a':1, 'b':2}] # {'a' : 1, 'b' : 2, 'c': [1, 2, 3], 'd' : [{'a':1, 'b':2 }]}
a['a'] = 'abc' # {'a' : 'abc', 'b' : 2, 'c': [1, 2, 3], 'd' : [{'a':1, 'b':2 }]}
a['c'][0] = 100 # {'a' : 'abc', 'b' : 2, 'c': [100, 2, 3], 'd' : [{'a':1, 'b':2 }]}
a['d'][0]['b'] = 'bbb' # {'a' : 'abc', 'b' : 2, 'c': [100, 2, 3], 'd' : [{'a':1, 'b':'bbb'}]}
삭제
# {'a' : 'abc', 'b' : 2, 'c': [100, 2, 3], 'd' : [{'a':1, 'b':'bbb'}]}
del a['b'] # {'a' : 'abc', 'c': [100, 2, 3], 'd' : [{'a':1, 'b':'bbb'}]}
함수들
○ keys()
dic = {'name' : 'hong', 'phone' : '01012345678', 'birth' : 1118}
dic.keys() # dict_keys(['name', 'phone', 'birth'])
for k in dic.keys():
print(k)
# name
# phone
# birth
[k for k in dic.keys()] # ['name', 'phone', 'birth']
list(dic.keys()) #['name', 'phone', 'birth']
○ values()
dic = {'name' : 'hong', 'phone' : '01012345678', 'birth' : 1118}
dic.values() # dict_values(['hong', '01012345678', 1118])
for v in dic.values():
print(v)
# hong
# 01012345678
# 1118
○ key, value 쌍
dic.items()
# dic_items([('name', 'hong'), ('phone', '01012345678'), ('birth' : 1118)])
for k, v in dic.items():
print(f'k: {k} / v: {v}')
# k: name / v: hong
# k: phone / v: 01012345678
# k: birth / v: 1118
4. 집합
○ 중복을 허용하지 않고, 순서가 없어요.
집합생성
a = set([1, 1, 2, 2, 2])
a # {1 , 2}
b = set('Hello')
b # {'H', 'e', 'l', 'o'}
교집합/합집합/차집합
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])
# -------------------------------------
a & b # {3, 4, 5} 교집합
a.intersection(b) # {3, 4, 5} 교집합
# -------------------------------------
a | b # {1, 2, 3, 4, 5, 6, 7} 합집합
a.union(b) # {1, 2, 3, 4, 5, 6, 7} 합집합
# -------------------------------------
a - b # {1, 2} 차집합
a.difference(b) # {1, 2} 차집합
추가
a = set([1, 2, 3])
a.add('55')
a.add(77)
a.update(['a', 'b', 'c']) #여러개 추가 .update(추가할 요소)
a # {1, 2, 3, '55', 77, 'a', 'b', 'c'}
제거
a = set([1, 2, 3, 4, 5])
a.remove(1)
a # {2, 3, 4, 5}
5. 불리언
True = 1, False = 0
자료형별 데이터의 참/거짓
전체적인 설명
a = 0 # 0 # False
b = 1 # 정수 # True
c = 1.1 # 실수 # True
d = "" # 빈String # False
e = "H" # String # True
f = [] # 빈 list # False
g = [[], []] # 빈 2차원 list # True
h = ['', ''] # 빈 string 2개 # True
i = [1,2] # list # True
j = () # 빈 튜플 # False
k = (1, 2) # 튜플 # True
l = set([]) # 빈 Set # False
m = set([1]) # set 값 # True
○ 숫자형
a, b, c, d = 0, 1, -1, 3.14
bool(a), bool(b), bool(c), bool(d)
# (False, True, True, True)
○ 문자형
a, b = "", "Hello World"
bool(a), bool(b)
# (False, True)
○ 리스트
a, b, c, d = [], list(), [1, 2, 3], ['a', 'b']
bool(a), bool(b), bool(c), bool(d)
# (False, False, True, True)
○ 튜플
a, b, c, d = (), tuple(), (1, ), (1, 2, 3)
bool(a), bool(b), bool(c), bool(d)
# (False, False, True, True)
○ 딕셔너리
a, b, c = {}, dict(), {'a' : 1}
bool(a), bool(b), bool(c)
# (False, False, True)
○ 집합
a, b, c = set(), set([1, 2, 3]), set(['a', 'b'])
bool(a), bool(b), bool(c)
# (False, True, True)
오늘 Python 자료구조에 대해 알아봤어요. 다음 시간에 또 배운 걸 포스팅 해볼게요!
'Networks > Python' 카테고리의 다른 글
SK networks AI Camp - 오류(Exception)와 예외처리 (6) | 2024.07.14 |
---|---|
SK networks AI Camp - Python을 활용한 구매 기능 (2) | 2024.07.13 |
SK networks AI Camp - Python 기본(3)_제어문 (0) | 2024.07.12 |
SK networks AI Camp - Python 기본(1) (0) | 2024.07.10 |
SK networks AI Camp - Python, Git 등 설치 (0) | 2024.07.09 |