사전스터디 개인과제인 예제풀기 10문제를 하면서 느낀점은 다른 사람들보다 나의 공부 속도가 느리고 지식이 부족하다는 점이었다. 10문제를 다 풀어가는 분들도 있는데 나는 이제 고작 4문제를 풀었을 뿐이었다. 일일히 구글링하면 답을 다 찾을 수 있겠지만 기본문법들로 만든 예제인 만큼 내가 공부한 것들로 풀어보고 싶었다. 그래서 다른 사람들의 속도를 보고 조급해하지 않고 나의 속도에 맞춰서 차근차근 해보기로 마음먹었다. 괜히 조급해하다가 다 망쳐버리는 건 아닌지 걱정도 되었고 내가 할 수 있을까 고민도 계속 되는 것은 사실이지만 이왕 시작한 거 꾸준히 차근차근 잘해봐야겠다. 일단 나의 첫번째 목표는 매일 매일 꾸준히 공부한 것들을 블로그로 정리하는 것이다.
오늘 공부한 것들에 대해서도 포스팅하려 한다.
리스트를 사용하면 1,2,3,4,5,6,7 같은 숫자 모음을 간단하게 표현할 수 있다. 리스트는 대괄호 [ ] 로 감싸주고 각 요소값은 쉼표(,)로 구분해준다.
리스트명 = [ 요소1, 요소2, 요소3, ... ]
리스트는 아무것도 포함하지 않는 비어있는 리스트일 수도 있고 숫자, 문자열을 요소값으로 가질 수 있다. 또한 숫자나 문자열을 함께 요소값으로 가질 수도 있고 리스트 안에 리스트를 요소값으로 가질수도 있다.
a = []
a = [1, 2, 3]
a = ['apple', 'banana', 'grape']
a = [1, 2, 'apple', 'strawberry']
a = [1, 2, ['lemon', 'mango']]
이처럼 리스트 안에는 어떠한 자료형도 포함시킬 수 있다.
리스트의 인덱싱과 슬라이싱
인덱싱(indexing)은 '가리킨다'는 의미이다.
a = [1, 2, 3, 4] 라는 리스트가 있다고 하자. 파이썬은 0부터 센다는 것을 잊으면 안 된다.
a[0]은 리스트 a 의 첫 번째 요소값을 말한다.
따라서 a[0]은 1을 가리킨다. a[3] 은 4를 가리킨다.
a = [1, 2, 3, ['a', 'b', 'c']]
위와 같은 리스트 a가 있다. 이 리스트에서 a[1]은 2를 가리키며 a[3]은 마지막 요소값인 ['a', 'b', 'c'] 를 가리킨다. 리스트 a에 포함된 ['a', 'b', 'c'] 리스트에서 'a' 값을 인덱싱을 사용해 꺼내려고 한다면 a[3][0] 을 실행하면 된다. a리스트의 3번째 요소값의 1번째 요소값이라는 의미가 된다.
슬라이싱(slicing)은 '잘라낸다'는 의미이다.
a = [1, 2, 3, 4, 5, 6] 이라는 리스트가 있다고 했을 때, a[0:3] 을 실행한다면 a라는 리스트의 0번째 요소값부터 3-1번째 요소값까지 슬라이싱한다는 의미이다. 따라서 a[0:3] 을 실행하면 [1, 2, 3]이 나온다.
또한 a[:3]을 실행하면 처음부터 a[2]까지 슬라이싱한다는 의미이여, a[3:]을 실행하면 a[3]부터 마지막까지 슬라이싱한다는 의미이다. a[:]을 실행하면 a리스트 전체를 슬라이싱한다는 의미이다.
리스트 연산하기
리스트도 +기호를 이용해 더할 수 있고 * 기호를 이용해 반복할 수 있다.
a = [1, 2, 3]
b = [4, 5, 6]
리스트가 있을 때 a + b 를 실행하면 [1, 2, 3, 4, 5, 6] 이 된다.
a * 3 을 실행하면 [1, 2, 3, 1, 2, 3, 1, 2, 3] 이 된다.
리스트 길이를 구하기 위해서는 len함수를 사용한다.
a = [1, 2, 3] 리스트가 있을 때 len(a)를 실행하면 3이 나온다. 리스트의 길이는 즉 리스트에 있는 요소값의 개수이다.
리스트의 수정과 삭제
a = [1, 2, 3] 이라는 리스트가 있다고 가정할 때, a[2] = 5 를 실행하면 a = [1, 2, 5]로 바뀐다. a리스트의 3번째 요소인 3을 5로 수정한다는 의미이다.
리스트의 요소를 삭제하는 방법은 del 함수를 이용한다.
a = [1, 2, 3] 리스트에서 첫번째 요소값을 삭제하고 싶다면 del a[0] 을 실행하면 a = [2, 3] 이 된다.
슬라이싱 기법을 이용해 리스트의 요소 여러 개를 한꺼번에 삭제할 수도 있다.
a = [1, 2, 3, 4, 5] 리스트에서 del a[3:] 를 실행하면 [4, 5] 가 삭제되어 a = [1, 2, 3] 가 된다.
리스트 관련 함수
append
리스트의 맨 마지막에 요소를 추가하는 함수이다.
a = [1, 2, 3]
a.append(4) 를 실행하게 되면 a = [1, 2, 3, 4]가 된다.
a = [1, 2, 3]
a.append([4, 5]) 를 실행하면 a = [1, 2, 3, [4, 5]] 가 된다.
sort
리스트의 요소를 순서대로 정렬해 준다.
a = [1, 5, 2, 4, 3]
a.sort() 를 실행하면 a = [1, 2, 3, 4, 5] 가 된다.
문자도 알파벳 순서도 정렬할 수 있다.
a = ['b', 'd', 'c', 'a']
a.sort() 를 실행하면 a = ['a', 'b', 'c', 'd'] 가 된다.
reverse
리스트를 역순으로 뒤집어 준다. 순서대로 정렬해서 뒤집어 주는 게 아니라 현재 리스트를 그대로 거꾸로 뒤집는다.
a = [1, 5, 3, 2]
a.reverse() 를 실행하면 a = [2, 3, 5, 1] 가 된다.
index
index(x)함수는 리스트에 x값이 있으면 x의 위치 값을 돌려준다.
a = [1, 2, 3, 4]
a.index(4) 를 실행하면 요소4는 리스트의 4번째(a[3])이므로 3을 돌려준다.
a.index(2) 를 실행하면 요소2는 리스트의 2번째(a[1])이므로 1을 돌려준다.
a.index(0) 을 실행하면 리스트에 요소0값은 존재하지 않기 때문에 값 오류(ValueError)가 발생한다.
insert
insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다.
a = [1, 2, 3]
a.insert(1, 4) 를 실행하면 a = [1, 4, 2, 3]이 된다.
remove
remove(x)는 리스트에서 첫번째로 나오는 x를 삭제하는 함수이다.
a = [1, 2, 3, 1, 2, 3]
a.remove(2)를 실행하면 a = [1, 3, 1, 2, 3] 이 된다.
pop
pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
a =[1, 2, 3]
a.pop() 을 실행하면 3을 돌려준다. 그리고 a = [1, 2]가 된다.
pop(x)는 x번째 요소를 돌려주고 그 요소는 삭제한다.
a = [1, 2, 3]
a.pop(1) 을 실행하면 2를 돌려주고 a = [1, 3]이 된다.
count
count(x)는 리스트 안에 x가 몇개 있는지 그 개수를 돌려주는 함수이다.
a = [1, 2, 3, 1, 1]
a.count(1) 을 실행하면 요소값 1이 3개가 들어있으므로 3을 돌려준다.
extend
extend(x)에서 x에는 리스트만 올 수 있다. 리스트 확장 함수이다. 원래의 리스트에 x리스트를 더하게 된다.
a = [1, 2, 3]
a.extend([4, 5] 를 실행하면 a = [1, 2, 3, 4, 5]가 된다.
튜플(tuple)은 리스트와 거의 비슷하며 몇가지 점만 다르다.
다른점
튜플은 인덱싱, 슬라이싱, 더하기, 곱하기(반복하기), 길이구하기는 리스트와 같다.
단, 값을 추가할 때는 a = (1, 2, 3) 이라는 튜플에 값 4를 추가해서 (1, 2, 3, 4)를 만든다면 a+(4, )를 실행한다.
딕셔너리(Dictionary)는 영어로 '사전'이라는 의미이다. 즉 'apple'이라는 단어에 '사과', 'subway'라는 단어에 '지하철'이라는 뜻이 부합되듯이 딕셔너리는 Key와 Value를 한쌍으로 갖는 자료형이다.
딕셔너리는 리스트나 튜플처럼 순차적으로 해당 요소값을 구하지 않고 Key를 통해 Value를 얻는다.
{Key1:Value1, Key2:Value2, Key3:Value3, ...}
Tip Key값에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다. 즉 Key값에 리스트는 사용할 수 없다.
딕셔너리 쌍 추가, 삭제하기
< 딕셔너리 쌍 추가하기 >
a = {1: 'a'}
a[2] = 'b' 를 실행하면 a = {1: 'a', 2: 'b'} 가 된다. [ ]안의 값이 Key가 되고 '=' 오른쪽의 값이 Value가 된다.
< 딕셔너리 쌍 삭제하기 >
del함수를 사용해서 삭제한다.
a = {1: 'a', 'name': 'sally', 3: [3, 4]}
del a['name'] 을 실행하면
a = {1: 'a', 3: [3, 4]} 가 된다.
del a[Key]처럼 지정한 Key에 해당하는 {key: value} 쌍이 삭제된다.
딕셔너리에서 key 사용해 value 얻기
score = {'eng': 80, 'math': 75, 'kor': 90}
score['eng'] 를 실행하면 key가 'eng'인 딕셔너리의 value를 반환하여 80이 반환된다.
어떤 key의 value를 얻기 위해서는 '딕셔너리 변수 이름[key]'를 사용한다.
딕셔너리 만들 때 주의사항
Key는 고유한 값이므로 중복되는 Key값을 설정하면 하나를 제외한 나머지 것들이 모두 무시된다. 동일한 Key가 존재하면 어떤 Key에 해당하는 Value를 불러야 할지 알 수 없기 때문이다.
딕셔너리 관련 함수
keys
Key 리스트 만들기 함수이다.
score = {'eng': 80, 'math': 75, 'kor': 90}
score.keys() 를 실행하면
dict_keys(['eng', 'math', 'kor']) 를 돌려준다. dict_keys 객체를 리스트로 변환하려면 list(score.keys()) 와 같이 실행하면 된다.
values
Value 리스트 만들기 함수이다. keys 함수와 같은 방법으로 실행하면 된다.
items
items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
score = {'eng': 80, 'math': 75, 'kor': 90}
score.items() 를 실행하면
dict_items([('eng','80'), ('math', '75'), ('kor', '90')]) 과 같이 돌려준다.
clear
clear 함수는 딕셔너리 안의 모든 요소를 삭제하여 빈 딕셔너리로 만든다.
get
get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다.
score = {'eng': 80, 'math': 75, 'kor': 90}
score.get('math') 를 실행하면 '75'를 돌려준다. score['math'] 를 사용했을 때와 동일한 결과값을 돌려받는다.
다른 점은 존재하지 않는 key값을 가져오려고 할 경우 score[x] 는 오류가 발생하고 score.get(x)는 None을 돌려준다.
in
해당 Key가 딕셔너리 안에 있는지 조사하는 함수이다.
score = {'eng': 80, 'math': 75, 'kor': 90}
'math' in score 를 실행하면 'True'를 돌려주고 딕셔너리에 존재하지 않는 'computer' in score 를 실행하면 'False'를 돌려준다.