금일은 리스트, 튜플 및 추가적으로 공부한 내용을 작성하려고한다.
기존에 파이참을 사용해서 진행했는데, 노트북이 8기가라 메모리 사용량이 많이 예민해지다보니 파이참이 vscode보다 무겁기때문에 이번 TIL에선 VSCODE로 진행할 예정이다.
리스트와 튜플은 비슷하지만 확실한 차이가 있는데,
리스트는 [], 튜플은 ()으로 둘러싼다.
리스트는 요솟값의 생성, 삭제, 수정이 가능하지만, 튜플은 요솟값을 바꿀 수 없다
리스트 기본문법
a = [ 1 , 2 , 3 ]
print ( a [ 1 ] + a [ 2 ]) #a의 인덱스 1번째 + a의 인덱스 2번째 합해서 5가 출력
리스트엔 자료형도 대입해줄 수 있다.
a = [ 1 , '2' , '3' ]
print ( a [ 1 ] + a [ 2 ]) #a의 인덱스 1번째 + a의 인덱스 2번째 합해서 23(자료형) 출력
a = [ 1 , '2' , '3' ]
print ( a [ - 1 ]) # -1도 대입해줄수있는데 이것역시 거꾸로 출력해준다. 3 출력
리스트는 스트링이랑 비슷하게 인덱싱이 이루어진다.
a = [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ]] # 리스트 안에 또 리스트를 만들어줄 수 있다 다른 리스트를 만들어줄때 ,를 유의하자
# 0, 1, 2는 1,2이 출력되고 리스트안의 리스트는 3번 인덱스로 되어있다.
print ( a [ 3 ][ 1 ]) # 출력하게되면 b가 출력되어지게된다. (리스트안에 리스트는 다시 0부터 시작)
a = [ 1 , 'hello' , 3 , [ 'a' , 'b' , 'c' ]]
# 리스트 안에 1번 인덱스는 hello이다.
print ( a [ 1 ][ 0 ]) #hello의 인덱스 중 0번째를 선택해주면 출력은 h가 나오게된다.
리스트의 슬라이싱
a = [ 1 , 2 , 3 , 4 , 5 ]
print ( a [ 0 : 2 ]) #슬라이싱을 사용할 경우 인덱스 0번 이상, 인덱스 2번 미만이기때문에 1, 2 출력
슬라이싱의 기본은 문자열과 동일하므로 응용해보면 될거같다.
a = [ 1 , 2 , 3 , [ 'a' , 'b' , 'c' ], 4 , 5 ]
print ( a [ 2 : 5 ]) #인덱스 2번 이상, 5번 미만이므로 [3, ['a', 'b', 'c'], 4] 출력
중요하게 쓰이는 개념이므로 복습해두자.
리스트의 연산
더하기
a = [ 1 , 2 , 3 ] # 서랍 a와
b = [ 4 , 5 , 6 ] # 서랍 b가
print ( a + b ) # 더해지면 [1, 2, 3, 4, 5, 6] 로 출력된다.
곱하기(반복하기)
a = [ 1 , 2 , 3 ] # 서랍 a와
b = [ 4 , 5 , 6 ] # 서랍 b가
print ( a * 3 ) # 곱해지면 [1, 2, 3, 1, 2, 3, 1, 2, 3] 로 출력된다.
리스트의 길이구하기
a = [ 1 , 2 , 3 , 5 ]
print ( len ( a )) # 인덱스가 4개 있으므로, 4가 출력된다.
형태가 다를경우 (int, str)
a = [ 1 , 2 , 3 ]
print ( a [ 2 ] + "hi" ) # 인덱스 2번은 3인데 정수형이고, hi는 문자열이기때문에 더해질 수 없어 오류가난다.
따라서
a = [ 1 , 2 , 3 ]
print ( str ( 3 ) + "hi" ) # 따라서 3을 문자열로 변경해주는 str을 사용해주면 3hi가 출력된다
리스트의 수정과 삭제
a = [ 1 , 2 , 3 ]
a [ 2 ] = 4 # 2번째 인덱스를 4로 변경해준다
print ( a ) # 출력 1, 2, 4
del 함수를 사용해 삭제하기
a = [ 1 , 2 , 3 ]
del a [ 1 ] # 첫번째 인덱스를 삭제해준다.
print ( a ) # 출력 1, 3
del 함수를 이용해서 슬라이싱으로 삭제하기
a = [ 1 , 2 , 3 , 4 , 5 ]
del a [ 2 :] # 2번째 인덱스부터 끝까지 지워준다.
print ( a ) # [1, 2]
리스트의 요소 추가하기 - append
a = [ 1 , 2 , 3 , 4 , 5 ]
a . append ( 6 ) # 6를 추가해준다.
print ( a ) # [1, 2, 3, 4, 5, 6] 출력
리스트의 정렬 - sort
a = [ 1 , 5 , 4 , 2 , 3 ]
a . sort () # 오름차순으로 정렬
print ( a ) # [1, 2, 3, 4, 5] 출력
리스트의 뒤집기 - reverse [우측에서 순서대로 읽어드림]
a = [ 1 , 5 , 4 , 2 , 3 ]
a . reverse () # 뒤집어서 불러드림
print ( a ) # [3, 2, 4, 5, 1] 출력
여기에 sort 명령어를 사용해주면 내림차순으로 정렬시킬 수 있다.
a = [ 1 , 5 , 4 , 2 , 3 ]
a . sort ()
a . reverse () # 내림차순으로 정렬
print ( a ) # [5, 4, 3, 2, 1] 출력
인덱스 반환 - index
a = [ 1 , 5 , 4 , 2 , 3 ]
print ( a . index ( 5 )) # 5는 두번째 index이므로 1이 출력된다.
리스트에 요소 삽입 - insert
몇번째 인덱스에 어떤 값을 넣겠다고 순서를 정해주는데, 그곳에 삽입할 수 있다.
a = [ 1 , 5 , 4 , 2 , 3 ]
a . insert ( 2 , 10 ) # 2번째 인덱스에 10을 삽입 #( {특정 인덱스}, {삽입할 값} )
print ( a ) # 5는 두번째 index이므로 [1, 5, 10, 4, 2, 3] 출력된다.
리스트 요소 제거 - remove
리스트 내부에 특정한 값을 없애주는데, 리스트 인덱스 0부터 탐색 후 가장 먼저 들어오는 값을 제거해준다.
a = [ 1 , 5 , 4 , 2 , 3 , 4 , 2 , 4 , 5 ]
a . remove ( 2 ) # index 3에 위치한 2를 제거
print ( a ) # [1, 5, 4, 3, 4, 2, 4, 5] 가 출력된다.
리스트 요소 끄집어 내기 - pop
특정 index를 꺼낼 수 있지만, 특정해주지않으면 맨 끝의 값을 꺼내준다.
a = [ 1 , 2 , 3 ]
print ( a . pop ( 2 )) # 2번째 index의 3을 끄집어냈다.
print ( a ) # 출력은 3 [1, 2]
리스트 포함된 요소 x의 개수 세기 - count
a = [ 1 , 2 , 3 , 4 , 1 , 3 ]
print ( a . count ( 1 )) # x값이 1이므로 LIST에 1은 두개다. 따라서 2가 출력된다.
리스트 확장 - extend
append는 리스트라는 서랍장안에 다른 서랍장을 추가로 만들어주는 반면, extend는 서랍장 안 공간에 추가적으로 값을 넣어준다.
a = [ 1 , 2 , 3 , 4 ]
a . extend ([ 5 , 6 ])
print ( a ) #설명대로 기존 리스트 a안에 5,6을 추가해준다.
# 따라서 출력은 [1, 2, 3, 4, 5, 6]
b = [ 1 , 2 , 3 ]
b . append ([ 4 , 5 , 6 ]) # 설명대로 기존 리스트 b안에 4,5,6이라는 서랍장을 추가로 만들어준다.
print ( b ) #따라서 출력은 [1, 2, 3, [4, 5, 6]]
이렇게 파이썬 리스트에 대한 개념에 대해 공부를 했다.
간단하게 이해하고 넘어가도 될 부분인데, 모르면 사용할 수도 없다보니 하나하나 찾아가며 사용해보고 몸에 익히느라
수업진행이 조금 딜레이되고있어서 조금 속도를 더 내봐야될거같다.
튜플
튜플은 잠긴 서랍장의 개념이며, 변형되지않는다.
다만 인덱싱과 슬라이싱이 가능하고
기초적인 내용은 상단에 리스트와 비슷하다. (대신 변경하는 문구는 사용 x)
t1 = ()
t2 = ( 1 ,)
t3 = ( 1 , 2 , 3 )
t4 = 1 , 2 , 3
t5 = ( 'a' , 'b' , ( 'ab' , 'cd' ))
# 튜플의 기본
딕셔너리 (사전의 특징을 가지고 있음)
조코딩 유튜브
딕셔너리는 API에 자주 활용됨
딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.
dic = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
# 딕셔너리의 기본구조
print ( type ( dic )) # class 'dict'
Value에 리스트도 넣을 수 있고, 여러개 넣을 수 있다.
딕셔너리에 쌍 추가하기
a = { 1 : 'a' }
a [ 2 ] = 'b' #키와 밸류를 추가해줄 수 있다
print ( a ) # 출력 {1: 'a', 2: 'b'}
a = { 1 : 'a' }
a [ 'Adam' ] = 'Eve' # 문자열도 가능
print ( a ) #{1: 'a', 'Adam': 'Eve'} 출력
a = { 1 : 'a' }
a [ 'age' ] = [ 11 , 34 , 22 , 7 ] # list도 추가할 수 있다.
print ( a ) #{1: 'a', 'age': [11, 34, 22, 7]} 출력
딕셔너리 삭제하기
a = { 2 : 'b' , 'name' : 'pey' , 3 : [ 1 , 2 , 3 ]}
del a [ 'name' ] # key로 선택가능하며 'name'을 키로 del 명령어로 지워줄 수 있다.
print ( a ) #{2: 'b', 3: [1, 2, 3]} 출력된다.
추가적으로 여러개를 삭제하고싶으면, key 값에 여러개의 값과 , 를 이용해주면 여러개의 값을 삭제할 수 있다.
딕셔너리 사용시 주의사항
a = { 1 : 'a' , 1 : 'b' } # key값이 중복되면
print ( a ) # {1: 'b'}가 출력되는데, 이는 a가 b에 중복되기때문이므로 key값은 중복시키면 안된다.
1가지 주의해야 할 점은 Key에 리스트는 쓸 수 없다는 것이다. 하지만 튜플은 Key로 쓸 수 있다. 딕셔너리의 Key로 쓸 수 있느냐, 없느냐는 Key가 변하는(mutable) 값인지, 변하지 않는(immutable) 값인지에 달려 있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없다. 다음 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할 수 없다는 오류가 발생한다.
딕셔너리 관련 함수
키 리스트 만들기 - .keys() - key값만 모아서 하나의 리스트(dict_keys)로 만들어주는 명령어
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( a . keys ()) #dict_keys(['name', 'phone', 'birth']) 출력
밸류 리스트 만들기 - .values() - value값만 모아서 하나의 리스트(dict_values)로 만들어주는 명령어
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( a . values ()) #dict_values(['pey', '010-9999-1234', '1118']) 출력
key와 values를 쌍으로 얻는 방법 : .items() - key와 value가 tuple에 들어가서 리스트(dict_items)를 만들어주는 명령
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( a . items ())
#dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')]) 출력
key와 values를 쌍으로 지우는 방법 : .clear()
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
a . clear ()
print ( a ) # {} 출력
Key로 Value 얻기 - .get
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( a . get ( 'name' )) # pey가 출력된다.
# 대괄호에 key를 넣는 방식으로 없는 key라면 에러가 나게 되는데
# get방식으로 key를 넣는다면, 에러가 나지않고 None이 출력되게된다.
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( a . get ( 'fullname' , "There is no key" )) # 값이 없는경우엔 , 후에 내용을 적어줄 수 있다.
# There is no key 출력
해당 Key가 딕셔너리 안에 있는지 조사하기 - in
a = { 'name' : 'pey' , 'phone' : '010-9999-1234' , 'birth' : '1118' }
print ( 'name' in a ) # name이 있으면 True 출력
print ( 'fullname' in a ) # name이 있으면 False 출력
다른 딕셔너리와 합치기 - zip
date = [ '09/05' , '09/06' , '09/07' , '09/08' , '09/09' ]
close_price = [ 10500 , 10300 , 10100 , 10800 , 11000 ]
close_table = dict ( zip ( date , close_price )) # zip문 예시
print ( close_table )
#{'09/05': 10500, '09/06': 10300, '09/07': 10100, '09/08': 10800, '09/09': 11000} 출력된다.
집합
s1 = set ([ 1 , 2 , 3 ])
print ( s1 ) # 간단한 예시, <class 'set'>
문자열사용시,
s1 = set ( "hello" )
print ( s1 ) #집합개념에 순서가 없으므로 {'o', 'h', 'e', 'l'}가 출력된다.
그런데 위에서 살펴본 set("Hello")의 결과가 좀 이상한데, 분명 "Hello" 문자열로 set 자료형을 만들었는데 생성된 자료형에는 l 문자가 하나 빠져 있고 순서도 뒤죽박죽이다. 그 이유는 set에 다음과 같은 2가지 특징이 있기 때문이다.
중복을 허용하지 않는다.
순서가 없다(Unordered).
집합자료는 인덱싱이 불가능하기때문에 list나 tuple로 변환시켜서 인덱싱을 해줘야한다.
s1 = set ([ 1 , 2 , 3 , 4 ])
l1 = list ( s1 )
print ( l1 [ 0 ]) # 리스트 0번은 1이기때문에, 1이 출력된다.
집합을 쓰는 이유는 중복제거할때 많이 쓰인다.
교집합 (함수 intersection)
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s2 = set ([ 4 , 5 , 6 , 7 , 8 , 9 ])
print ( s1 & s2 ) # 두개를 교집합하면 {4, 5, 6}이 출력된다.
합집합 (함수 union)
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s2 = set ([ 4 , 5 , 6 , 7 , 8 , 9 ])
print ( s1 | s2 ) # 두개를 합집합하면 {1, 2, 3, 4, 5, 6, 7, 8, 9}이 출력된다.
차집합 (함수 difference)
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s2 = set ([ 4 , 5 , 6 , 7 , 8 , 9 ])
print ( s1 - s2 ) # 두개를 차집합하면 {1, 2, 3}이 출력된다.
집합 자료형 관련 함수
값 1개 추가하기 - add
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s1 . add ( 7 )
print ( s1 ) # 7을 add해주면 {1, 2, 3, 4, 5, 6, 7}가 출력된다.
값 여러 개 추가하기 - update
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s1 . update ([ 7 , 8 , 9 ])
print ( s1 ) # 7, 8, 9를 update 해주면 {1, 2, 3, 4, 5, 6, 7, 8, 9}가 출력된다
# 또한 중복값일경우 중복제거가 되므로 유의해준다.
특정 값 제거하기 - remove
s1 = set ([ 1 , 2 , 3 , 4 , 5 , 6 ])
s1 . remove ( 2 )
print ( s1 ) # 특정값인 2를 제거하여 {1, 3, 4, 5, 6} 출력된다.
불(bull)
불(bool) 자료형이란 참(True)과 거짓(False)을 나타내는 자료형이다. 불 자료형은 다음 2가지 값만을 가질 수 있다.
True: 참을 의미한다.
False: 거짓을 의미한다.
자료형의 참과 거짓
‘자료형에 참과 거짓이 있다?’라는 말이 조금 이상하게 들리겠지만, 참과 거짓은 분명히 있다. 이는 매우 중요한 특징이며 실제로도 자주 쓰인다.
변수
변수에는 각각 id가 있고 그 안에 값이 들어가져있다.
a = [ 1 , 2 , 3 ]
b = a
print ( id ( a )) # 주소 1800895047104
print ( id ( b )) # 주소 1800895047104 두 주소의 값이 같게 나온다.
print ( a is b ) # True가 출력된다.
이용하기
[:]
a = [ 1 , 2 , 3 ]
b = a [:] # a를 슬라이싱해서 b에 넣어주기때문에 두 값의 주소는 다르게 된다.
a [ 1 ] = 4
print ( id ( a )) # 주소 1800895047104
print ( id ( b )) # 주소 2725758791616 두 주소의 값이 다르게 나온다.
print ( a is b ) # False가 출력된다.
list
a = [ 1 , 2 , 3 ]
b = a [ 1 ] # a를 뽑고 거기에 인덱스 1번째를 불러오기때문에 주소값이 달라진다.
a [ 1 ] = 4
print ( id ( a )) # 주소 1800895047104
print ( id ( b )) # 주소 2725758791616 두 주소의 값이 다르게 나온다.
print ( a is b ) # False가 출력된다.
이외에도 copy 모듈이 있는데, 추후에 from, import 개념을 배워서 써보도록 해봐야겠다.
변수를 만드는 여러가지 방법
# a = 'python'
# b = 'title'
a , b = ( 'python' , 'title' ) #이 방법으로도 변수에 값을 넣어줄 수 있다
print ( a ) # python 출력
print ( b ) # title 출력
[ a , b ] = [ 'python' , 'title' ] # list로도 변수에 값을 넣어줄 수 있다
print ( a ) # python 출력
print ( b ) # title 출력
변수 바꾸는 방법
a = 3
b = 5
a , b = b , a # 변수끼리 변경이 가능한데,
print ( a ) # 5가 출력되고
print ( b ) # 3이 출력된다.
이것을 끝으로 점프투파이썬의 자료형에 대해 공부했다.
거의 이틀동안 한문제 한문제 직접 써보며 터득했는데, 확실히 직접 해보고 부딪혀보는게 이해가 더 빨리되는느낌이다.
내일부턴 제어문과 함수에 대해 좀 빡세게 공부해봐야겠다.
다행히 한번도 안졸렸다!!!