리스트(List)
다른 언어의 "배열"과 비슷한 구조라고 생각하면 쉽다. 하지만 파이썬의 리스트는 동적 배열로서 인덱스 조절 없이 자유롭게 값의 추가와 삭제가 가능하다.
리스트는 값들을 [](대괄호)로 감싸서 표현이 가능하다. 자세한 설명은 예시를 보자.
x=[] #빈 리스트 선언 x=[1, 2.0, True, 'str'] #값을 할당하는 방법, 모든 자료형이 리스트에 들어갈 수 있다. print(x[0]) #리스트를 인덱싱 하는 법, 인덱스는 0부터 시작. print(x[-1])#음수 인덱싱 가능, 0을 기준으로 뒤로간다고 생각하면 편함. print(x[0:2]) #리스트 슬라이싱, 인덱스 0부터 1까지의 값을 리스트로 반환.(2는 포함하지않는다.) x.append(5); #리스트의 맨 뒤에 값을 추가하는 메서드 print(x); x.insert(2,4); #2번 인덱스에 4라는 값을 추가하는 메서드 print(x); del x[-1]; #해당 인덱스의 값을 리스트에서 삭제(예시에서는 맨 뒤의 값 삭제) print(x); x.remove(1); #리스트에서 찾은 1 중 가장 낮은 인덱스를 가진 값 삭제(1이 존재하지않으면 오류) print(x); x.index(True); #True라는 값을 가진 인덱스를 반환(위와 같이 True가 많으면 가장 낮은 인덱스 반환) >>1 >>str >>[1, 2.0] >>[1, 2.0, True, 'str', 5] >>[1, 2.0, 4, True, 'str', 5] >>[1, 2.0, 4, True, 'str'] >>[2.0, 4, True, 'str']
리스트는 위와 같이 값들의 변경이 가능하고, 인덱스를 통해 정렬되어있다.
튜플(Tuple)
튜플은 ()(소괄호)를 이용해 생성한다. 리스트와 비슷하나 튜플은 값의 변경(추가 삭제 갱신)이 불가능하다.
x=(1,2,3,4); #튜플 생성 x=(1) #튜플x, int형 number. x=(1,) #튜플o, 한개의 값을 튜플로 만들 때는 ,구분자를 넣어주어야한다. #x[1]=3 ->오류발생, (변경불가) #del x[1] ->오류발생, (삭제불가) print(x[1]); print(x[0:2]); #인덱싱과 슬라이싱 가능, 리스트와 똑같이 [](대괄호)를 이용하여 인덱싱 >>2 >>(1, 2)
튜플 내 값은 변경이 불가능하나 튜플 내 객체는 변경이 가능하다.
x=([1,2],[3,4],[5,6]); x[0][0]=3; #2중 인덱싱 x[0]= [1,2] ->x[0][0]=1; print(x); >>([3, 2], [3, 4], [5, 6])
튜플또한 인덱싱이 가능한 정렬된 값들의 모음이다.
셋(Set)
셋이란 중복이 없는 정렬되지 않은 값들의 모음이다.(수학에서의 집합을 생각하면 편하다.) 정렬이 되지 않았으니 리스트, 튜플과는 다르게 인덱싱과 슬라이싱이 불가능하다.
셋은 {}(중괄호)를 이용해 생성할 수 있다. 하지만 빈 셋(Set)은 {}로 생성이 불가능하다.
x=set(); x={1,2,3}; x.add(3); #3 추가 print(x); #이미 3이란 값이 존재하므로 셋은 변하지 않는다. x.remove(3); #3 삭제 print(x); x.update({2,3,4}); #한번에 여러개의 값 추가 print(x); #print(x[1]) 정렬이 되어있지않아 인덱싱 불가, 따라서 값의 변경도 불가능하다. >>{1, 2, 3} >>{1, 2} >>{1, 2, 3, 4}
셋(Set)끼리의 연산
수학에서 사용하는 집합 연산(교집합, 합집합 등)이 셋(Set)에서도 가능하다.
x={0,1,2,3,4}; y={1,3,5,7,9}; print(x.difference(y)); #x-y 차집합 print(x.intersection(y)); #x&y 교집합 print(x.symmetric_difference(y)); #교집합의 여집합 print(x.union(y)); #x|y 합집합 >>{0, 2, 4} >>{1, 3} >>{0, 2, 4, 5, 7, 9} >>{0, 1, 2, 3, 4, 5, 7, 9}
딕셔너리(Dictionary)
파이썬에서의 딕셔너리(dictionary)는 단어와 정의를 연결하는 사전과 비슷하다.
단어와 정의 대신 key와 value를 연결해주는 역할을 한다.
딕셔너리 내에서 key는 중복될 수 없고 변경이 불가능하다.(key를 모으면 셋(Set)이 된다.) value는 중복이 가능하다.
딕셔너리도 셋과 같이 {}(중괄호)를 이용해 생성할 수 있다.
x={} #빈 딕셔너리 생성(Set이 {}로 빈 Set을 생성하지 못하는 이유) x={'a':1,'b':2,'c':3}; #key와 value 사이에 콜론(:)을 넣어 서로를 연결 y={'c':3,'b':2,'a':1}; print(x==y) #딕셔너리는 정렬이 되어있지않기 때문에 True 출력 print(x.keys()) #딕셔너리 x의 모든 key를 셋(Set)과 유사한 객체로 반환. print(x.values()) #딕셔너리 x의 모든 value를 셋(Set)과 유사한 객체로 반환. print(x.items()) #딕셔너리 x의 모든 key와 value쌍을 셋(Set)과 유사한 객체로 반환. print(x.get('a')) #a라는 key와 연결된 value를 반환. 해당 key가 없으면 None반환. print(x.get('d',4)) #d라는 key와 연결된 value를 반환. 해당 key가 없으면 기본값으로 4 반환. print(x['a']); #인덱싱 가능 >>True >>dict_keys(['a', 'b', 'c']) >>dict_values([1, 2, 3]) >>dict_items([('a', 1), ('b', 2), ('c', 3)]) >>1 >>4 >>1
컬렉션으로 여러 변수에 동시 할당
w={'a':2,'b':3,'c':4}; x=[1,2,3]; y=(4,5,6); z={7,8,9}; a,b,c=w; #딕셔너리는 key를 반환 print(a,b,c); a,b,c=w.values(); #values() 메서드를 이용해 value 반환가능 print(a,b,c); a,b,c=x; print(a,b,c); a,b,c=y; print(a,b,c); a,b,c=z; print(a,b,c); >>a b c >>2 3 4 >>1 2 3 >>4 5 6 >>8 9 7
일반적인 할당문처럼 파이썬은 = 기호 오른쪽에 있는 모든 표현식을 먼저 평가하고, 이어서 왼쪽에 있는 변수에 그 값을 할당한다.
'Python' 카테고리의 다른 글
Python - 예외처리 (0) | 2020.08.10 |
---|---|
Python - 클래스(Class)와 객체(Object) (0) | 2020.08.09 |
Python - 딕셔너리 키(key), 값(value) 도치 (0) | 2020.08.04 |
Python - with 문 (0) | 2020.08.01 |
Python - is와 ==의 차이 (and,or,&,|) (1) | 2020.07.29 |