Python 리스트 & 딕셔너리

강경록·2022년 6월 2일

Python

목록 보기
8/9
post-thumbnail

이제 곧 여름인가 봅니다.
날씨가 더워지려고 하네요..
덥다고 너무 에어컨 밑에만 있지 마시고 종종 나가서 걷기도 하시고
피부 타는게 싫으시면 실내에서 운동을 하는 건 어떨까요?

저는 헬스를 하는데 요즘 근럼프가 온거같아서 마음이 좀 아픈데
포기하지 않고 계속 하다보면 다시 근성장이 이뤄지겠죠?ㅎㅎ

자! 이제 들어가 볼까요?


리스트 & 딕셔너리

리스트는 살짝 언급해서 알겠는데 딕셔너리는 뭐에요? 사전?

네 사전이라는 뜻이 맞아요.

일단 리스트에 대해서 배우고 딕셔너리에 대해서 배워보는 시간을 가져보겠습니다.

리스트

list()

리스트는 사전적 의미로는 ' 목록 ' 이라는 뜻입니다.

바~로 들어가봅시다!

list_1 = [24, 32, 53, 100, 234, 152, 2531]

print(type(list_1))
print(list_1)

>>> <class 'list'>
	[24, 32, 53, 100, 234, 152, 2531]

리스트는 저렇게 대괄호로 묶어준 것을 말합니다.
타입을 확인해 보면 list 라고 나오네요.

list 내부에 있는 원소들을 꺼내는 방법을 알아볼까요??

list_1 = [24, 32, 53, 100, 234, 152, 2531]

# 리스트의 첫번째 원소를 꺼내봅시다.

print(list_1[0])

>>> 24

이렇게 나옵니다.

어 혹시 기억 하시나요?
우리 문자열 슬라이싱 할때 ' [0:4] ' 이런식으로 썼던걸 기억 하시나요?

리스트에서 저것을 똑같이 활용할 수 있습니다.

list_1 = [24, 32, 53, 100, 234, 152, 2531]

# 리스트의 세번째 부터 다섯번째 까지 출력해 보겠습니다.

print(list_1[2:5])

>>> [53, 100, 234]

말이 어려울 수 있고 헷갈릴 수 있습니다.

list_1[시작 : 끝 + 1]

출력 끝내는 자리가 컴퓨터가 봤을 때 5번째 자리이면 끝나는 자리를 6으로 해서
작성해주면 됩니다.
끝 자리를 지정하지 않으시면 리스트의 가장 마지막 까지 출력이 됩니다.

리스트에는 뭘 넣든 상관없습니다.

list_2 = ['banana', 'spongebob', 'apple', 32, 29.7, ['apple', 'lemon']]

# 이렇게 다양하게 넣어줘도 출력하는 것에 전혀 문제가 없습니다.

print(list_2)
print(list_2[2])
print(list_2[3:])

>>> ['banana', 'spongebob', 'apple', 32, 29.7, ['apple', 'lemon']]
	'apple'
    [32, 29.7, ['apple', 'lemon']]

감이 오시나요?

근데요.. 리스트안에 리스트가 들어가있는데 저 리스트 안에있는 하나의 데이터만 가져오려면 어떻게 해야하나요??

자! 이것도 한번 알아봅시다!

list_2 = ['banana', 'spongebob', 'apple', 32, 29.7, ['apple', 'lemon']]

print(list_2[5][0])

>>> 'apple'

리스트의 list_2[5] 번째가 리스트 안에 리스트죠?
여기에 list_2[5][0] 이렇게 해주면 list_2의 5번째에 있는 리스트의 0번째 라는 의미가 됩니다.

좀더 어렵게 가볼까요?

list_a = [[20, 30], 40, [50, 60, 70, [80, 90]]]

print(list_a[0])
print(list_a[0][0]) 
print(list_a[0][1])
print(list_a[1])
print(list_a[2])
print(list_a[2][0])
print(list_a[2][1])
print(list_a[2][2])
print(list_a[2][3])
print(list_a[2][3][0])
print(list_a[2][3][1])

>>> [20, 30]
    20
    30
    40
    [50, 60, 70, [80, 90]]
    50
    60
    70
    [80, 90]
    80
    90

이걸 보면 좀 감이 잡히실까요??

마치 우리가 컴퓨터에서 폴더를 타고 들어가는 것처럼
리스트에서 하나의 폴더로 들어가서 그 폴더에있는 폴더로 들어가고..

이런식의 프로세스를 가지고 있습니다.

"list_a 의 [0] 폴더에 들어가서 [0] 번째 파일 실행 시켜줘" => list_a[0][0]

요런 느낌이죠.
한 번 직접 해보시는 것을 권장드립니다.

보는 것 만으로는 잘 모를 수 있어요.

이번에는 리스트 연산을 해볼까요?

리스트 연산 (덧셈, 곱셈)

list_1 = [10, 20, 30, 40, 50, 60]
list_2 = [1, 2, 3, 4, 5, 6]

print(list_1 + list_2)
print(list_1 * 2)
print(list_2 * 3)

>>> [10, 20, 30, 40, 50, 60, 1, 2, 3, 4, 5, 6]
	[10, 20, 30, 40, 50, 60, 10, 20, 30, 40, 50, 60]
    [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

전혀 어렵지 않죠?
넘어가겠습니다.

리스트 요소 추가

리스트에 다른 요소를 넣으려면 어떻게 해야할까요?

list_1.append(요소)
list_1.insert(위치, 요소)

이렇게 두가지 방법이 있습니다.

# append

list_1 = [10, 20, 30, 40, 50, 60]

list_1.append(70)

print(list_1)

>>> [10, 20, 30, 40, 50, 60, 70]
# insert

list_1 = [10, 20, 30, 40, 50, 60]

list_1.insert(0, 25)

print(list_1)

>>> [25, 10, 20, 30, 40, 50, 60]

보통

append()

를 많이 사용합니다.

append 를 이용해서 재밌는 걸 할 수 있습니다.

# 비어있는 리스트 하나를 만들어 줍니다
list_0 = []

# 반복문으로 비어있는 리스트에 0~9 까지 넣어줍니다
for i in range(0, 10):
	list_0.append(i)
    
print(list_0)

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

재밌죠?

리스트 요소 제거

이번에는 추가가 아닌 제거를 해보겠습니다.

# del
list_1 = [10, 20, 30, 40, 50, 60]

del list_1[0]
print(list_1)

>>> [20, 30, 40, 50, 60]
# pop
list_1 = [10, 20, 30, 40, 50, 60]

list_1.pop(0)
print(list_1)

>>> [20, 30, 40, 50, 60]
# remove
list_1 = [10, 20, 30, 40, 50, 60]

list_1.remove(10)
print(list_1)

>>> [20, 30, 40, 50, 60]
# clear 모두 제거
list_1 = [10, 20, 30, 40, 50, 60]

list_1.clear()
print(list_1)

>>> []

네 이렇게 알아봤습니다.

재밋죠??
재미없다구여?

재미있지 않아도 해야됩니다..
우린 지금 정말 기초중에 기초만 한거거든요..

이제 리스트는 어느정도 배운것 같습니다.
여러분들이라면 하나를 알려주면 10000개를 할 수 있을거라 생각합니다!!

딕셔너리

이건 사전이라고 생각하시면 됩니다.

직접 한번 볼까요??

dict_1 = {0 : 10, 
	1: 20, 
    2 : 30}
    
print(type(dict_1))
print(dict_1)

>>> <class 'dict'>
    {0: 10, 1: 20, 2: 30}

이런 식으로 되어있는 것이 딕셔너리 형태입니다.

딕셔너리 형태가 조금 복잡하실 수 있는데
전자 사전을 생각하시면 편합니다.

dict_1 = {0 : 10, 
	1: 20, 
    2 : 30}
    
print(dict_1[0])
print(dict_1[1])
print(dict_1[2])

>>> 10
    20
    30

이렇게 됩니다.

그럼 진짜 전자사전처럼 해볼까요??

오랜만에 빅파이 대리가 김덕순 사원을 찾았습니다.

빅파이 대리 : 김덕순 사원 ! 우리 회사에 전문 용어 사전이 필요한데 파이썬으로 만들어 주지않겠어? 커피 쏠게~

만들어 봅시다..

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}
    
# 전문용어와 뜻이 저장되어 있습니다.
# 출력 해볼까요?
# 저는 apple 의 뜻이 궁금합니다.

print(dict_2["apple"])

>>> 사과

와우.. 내가 사전을 만들다니!!
사전 어플리케이션을 출간해도 될 지경입니다.

느낌이 오시죠??

그럼 좀더 친절한 기능을 사용해 볼게요

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}
          
# 이 사전의 어떤 전문용어들이 있는지 궁금해!
# 이 사전의 어떤 전문용어들의 뜻 들이 있는지 궁금해!

print(dict_2.keys())
print(dict_2.values())

>>> dict_keys(['apple', 'banana', 'cherry', 'dragon'])
	dict_values(['사과', '바나나', '체리', '용'])

너무 친절하네요.

근데 keys, values 가 뭐죠?

key 는 여러분이 찾고싶어하는 항목입니다.
keys 는 그것을 모두 보여주는 함수입니다.

value 는 여러분이 찾고싶어하는 항목의 값 입니다.
values 는 그것을 모두 보여주는 함수입니다.

이렇게 비유를 해드리고 싶네요.

우리가 python을 많이 하다보면 복잡한 딕셔너리 형태도 보실 수 있는데
나중에 보지말고 지금 한 번 봐볼까요??

character_dict = {"이름" : "김덕순",
                  "나이" : "27",
                  "학력" : {"초등학교" : "코딩 초등학교 졸",
                          "중학교" : "파이썬 중학교 졸",
                          "고등학교" : "슈퍼파이썬 고등학교 졸",
                          "대학교" : "마스터 대학교 졸"},
                  
                  "가족관계" : {"부" : "김갑철",
                            "모" : "분모자",
                            "동생" : "김덕튀"},
                  
                  "신발사이즈" : "300"}

print(character_dict['이름'])
print(character_dict['학력']['초등학교'])
print(character_dict['학력']['대학교'])
print(character_dict['가족관계']['동생'])

>>> 김덕순
    코딩 초등학교 졸
    마스터 대학교 졸
    김덕튀

이건 김덕순 사원의 인적사항을 사전으로 만들었습니다.

사전이라기 보다는 김덕순 사원의 ' 데이터베이스 '를 만들었다고 봐야겠죠?

저 코드를 복사해서 실험 해보셔도 좋고, 직접 만들어 보는 것도 좋습니다.

딕셔너리의 key, value에 접근하는 방법은 아시겠죠??
하나를 알면 열을 아는 여러분은 알고라고 믿습니다.

근데 제가 딕셔너리를 만들어 보고있는데 key, value 값에 따옴표 쓰기 귀찮아서
그냥 문자열을 썼는데 왜 오류가 나죠?

딕셔너리에서 key, value 값을 넣어줄 때 따옴표 안에 넣어줘야 인식을 합니다.

하지만 그건 문자열인 경우만 그렇고
정수, 실수형 을 넣을 때에는 따옴표 없이 가능 하지만
보통 정수, 실수도 문자열 형태로 저장하곤 합니다.

이번에는 만들어진 사전에 요소를 추가를 하는 방법을 알아볼까요?

딕셔너리 요소 추가

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}
          
dict_2["samsung"] = "삼성"

print(dict_2)

>>> {'apple': '사과', 'banana': '바나나', 'cherry': '체리', 'dragon': '용', 'samsung': '삼성'}

밑에 삼성이 추가 되었네요!

dict["넣고싶은 것"] = "넣고싶은 것의 값"

이렇게 하면 추가가 됩니다.
변경도 이렇게 하시면 됩니다.

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}
          
dict_2["samsung"] = "삼성"

# "삼숭" 으로 바꿔봅시다
dict_2["samsung"] = "삼숭"

print(dict_2)

>>> {'apple': '사과',
 'banana': '바나나',
 'cherry': '체리',
 'dragon': '용',
 'samsung': '삼숭'}

와우 이제 사전을 자유자재로 바꿀 수 있겠네요.

딕셔너리 요소 제거

이번에는 제거를 해보겠습니다.

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용",
          "samsung": "삼숭"}
          
del dict_2["samsung"]

print(dict_2)

>>> {'apple': '사과', 'banana': '바나나', 'cherry': '체리', 'dragon': '용'}

네 사라졌습니다.

리스트에서 삭제하는 함수랑 같네요?

반복문도 여기에 넣어서 쓸 수 있습니다.

딕셔너리 반복문

dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}
          
for key in dict_2:
    print(key, dict_2[key])
    
>>> apple 사과
    banana 바나나
    cherry 체리
    dragon 용
# 이런 방법도 있습니다.
dict_2 = {"apple" : "사과",
          "banana" : "바나나", 
          "cherry" : "체리", 
          "dragon" : "용"}

# zip 함수가 있는데요? 어떻게 쓰이는지 한번 분석해보세요!
for key, value in zip(dict_2.keys(), dict_2.values()):
    print(key, value)

>>> apple 사과
    banana 바나나
    cherry 체리
    dragon 용

사용법은

for 변수 (key) in 딕셔너리:
	### your code...

이렇습니다.

이러면 우리는 리스트와 딕셔너리를 거의 마스터했다고 보시면 됩니다.

앞에서 배웠던 내용들도 살살 들어와서 적용이 되죠?
앞으로 배우는 것들은 이렇게 처음에 배웠던 것들을 쏙쏙 가져와서
이용할 것이기 때문에 여기에만 안주하면 안됩니다.

복습을 확실하게 직접 코드를 쳐보면서 공부해주세요.
아는 것이 힘입니다.


마무리

자!
이렇게 오늘 리스트와 딕셔너리를 배워보았는데

음.. 여러분들이 제가 내는 퀴즈를 하실지는 모르겠지만..

이게 어쩌다 보니 강의자료가 되었는데

막 갑자기 사람 몰려서 유명해지는 건 아닌지 걱정이 되네요 ;;
ㅋㅋㅋㅋㅋㅋ

잡설이 많았네여!

Quiz

오늘도 제가 퀴즈를 내드릴거에요
어렵지 않으니까 한번 해보세요!

자신만의 사전을 만들어서 혼자 흐뭇해 해보시는게 퀴즈,,이면서 숙제입니다.

오늘도 즐겁게 코딩하시고 너무 책상에만 앉아있지말고 가끔 일어나서 코딩하세요!!
농담이고 가끔 나가서 산책도 하면서 광합성하세요 ㅎㅎ

화이팅입니다~

빠이빠잉!

profile
데이터를 배우는 나의 인생

0개의 댓글