리스트(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 |