리스트, 딕셔너리, 범위 자료형에 대해 이해한 내용을 바탕으로 포스팅하기
요번에도 파이썬과 이전에 배웠던 C언어 간의 비교점을 찾을 수 있었다!
파이썬의 리스트는, C언어의 배열 리스트와 달리,
"여러 종류"의 자료형으로도 구성할 수 있다!
C언어의 배열 리스트는 배열 내 모든 요소의 자료형이 '동일'해야하고, 만약 다른 종류의 자료형들을 하나로 묶고 싶다면 '구조체'라는 개념을 도입해야했던 걸로 기억하는데, 파이썬은! 그럴 필요 없다 ^__^!
요거... 되게 유용하게 써먹을 수 있을 것 같으니까..
까먹지 않게 관련 예시를 실행해보자.
# '숫자만'으로 구성된 리스트
[1, 2, 3, 4, 5]
# '문자열만'으로 구성된 리스트
["안", "녕", "하", "세", "요"]
# '여러 자료형'으로 구성된 리스트
[273, 32, 103, '문자열', True, False]
'''
정상 작동됨!
'''
아 참고로 '여러 자료형'에 뭐가 있는지 까먹었을 수도 있으니까
앞에서 배운 '파이썬의 자료형'도 정리해두면..
파이썬의 자료형
=> 문자열(string) / 숫자(number) / 불(boolean)
여러 말보단 바로 코드 & 그 결과로 보여주자면...
리스트에서의 IndexError 예외
: 리스트의 길이를 넘는 인덱스로 요소에 접근하려고 할 때 발생
이것도 긴 말보다는 코드로 바로 확인해보면 직관적이다!
# 리스트 선언
list_a = [1, 2, 3]
list_b = [4, 5, 6]
# 출력
print("# 리스트")
print("list_a =", list_a)
print("list_b =", list_b)
print()
"""
# 리스트
list_a = [1, 2, 3]
list_b = [4, 5, 6]
"""
# 기본 연산자
print("# 리스트 기본 연산자")
print("list_a + list_b =", list_a + list_b)
print("list_a * 3 =", list_a * 3)
print()
"""
# 리스트 기본 연산자
list_a + list_b = [1, 2, 3, 4, 5, 6]
list_a * 3 = [1, 2, 3, 1, 2, 3, 1, 2, 3]
"""
# 함수
print("# 길이 구하기")
print("len(list_a) =", len(list_a))
"""
# 길이 구하기
len(list_a) = 3
"""
'리스트 연결 연산자' VS. '요소 추가'
비파괴적 VS. 파괴적# 리스트 연결 연산자 : + => 비파괴적 list_a = [1, 2, 3] list_b = [4, 5, 6] print(list_a + list_b) # [1, 2, 3, 4, 5, 6] print(list_a) # [1, 2, 3] print(list_b) # [4, 5, 6]
# 요소 추가 : append(), insert(), extend() => 파괴적 list_a = [1, 2, 3] list_b = [4, 5, 6] list_a.extend(list_b) print(list_a) # [1, 2, 3, 4, 5, 6] print(list_b) # [4, 5, 6]
'비파괴적'인 것이 기본이다
- '원본'과 '새로운 결과' 모두 활용 가능 👉 선택지 多
BUT 파이썬 : 원본을 직접적으로 조작하는 기능 제공
- '리스트'는 용량이 매우 클 수 있는 가능성이 있기에 '원본'과 '새로운 결과', 두 가지로 생성하는 것은 위험하기 때문이다.
list_a = [0, 1, 2, 3, 4, 5]
print("# 리스트의 요소 하나 제거하기")
# 제거 방법[1] - del 키워드
del list_a[1]
print("del list_a[1] :", list_a) # [0, 2, 3, 4, 5]
# 제거 방법[2] - pop()
list_a.pop(2)
print("pop(2) :", list_a) # [0, 2, 4, 5]
list_a.pop()
print("pop() :", list_a) # [0, 2, 4]
# del 키워드 - 범위 지정
list_b = [0, 1, 2, 3, 4, 5, 6]
del list_b[3:6]
print(list_b) # [0, 1, 2, 6]
list_c = [0, 1, 2, 3, 4, 5, 6]
del list_c[:3]
print(list_c) # [3, 4, 5, 6]
list_d = [0, 1, 2, 3, 4, 5, 6]
del list_d[3:]
print(list_d) # [0, 1, 2]
list_c = [1, 2, 1, 2]
list_c.remove(2)
print(list_c) # [1, 1, 2]
list_a = [273, 32, 103, 57, 52]
print(57 in list_a) # True
print(99 not in list_a) # True
딕셔너리 VS. 리스트
- 리스트 : "인덱스"를 기반으로 값 저장
- 딕셔너리 : "키"를 기반으로 값 저장
# 딕셔너리 선언
dictionary = {
"name" : "7D 건조 당고",
"type" : "당절임",
"ingredient" : ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin" : "필리핀"
}
# 딕셔너리 요소 접근
print("name :", dictionary["name"]) # name : 7D 건조 당고
print("type :", dictionary["type"]) # type : 당절임
print("ingredient :", dictionary["ingredient"]) # ingredient : ['망고', '설탕', '메타중아황산나트륨', '치자황색소']
print("origin :", dictionary["origin"]) # origin : 필리핀
print()
# 값 변경
dictionary["name"] = "8D 건조 망고"
print("name :", dictionary["name"]) # name : 8D 건조 망고
# 값 - '리스트'
print(dictionary["ingredient"][1]) # 설탕
키를 '문자열'로 사용할 때는 반드시 따옴표("") 붙여줄 것
dict_key = {
name : "7D 건조 망고", # "name"이 아닌 name으로 쓰면 name이라는 "변수"로 인식함
type : "당절임" # "type"이 아닌 "type() 함수"로 인식함
}
'''
Traceback (most recent call last):
File "d:\Workspace\python_hongong\nameError.py", line 2, in <module>
name : "7D 건조 망고",
NameError: name 'name' is not defined
'''
딕셔너리에서의 KeyError 예외
: 존재하지 않는 키에 접근할 때 발생
# 딕셔너리에 요소 '추가'하기
# 딕셔너리 선언
dictionary = {}
# 출력 - before
print("요소 추가 이전: ", dictionary)
# 딕셔너리 요소 '추가'
dictionary["name"] = "새로운 이름"
dictionary["head"] = "새로운 정신"
dictionary["body"] = "새로운 몸"
# 출력 - after
print("요소 추가 이후 : ", dictionary)
# 딕셔너리에 요소 '제거'하기
# 딕셔너리 선언
dictionary = {
"name" : "7D 건조 망고",
"type" : "당절임"
}
# 출력 - before
print("요소 제거 이전 : ", dictionary)
# 딕셔너리 요소 '제거'
del dictionary["name"], dictionary["type"]
#del dictionary["name"]
#del dictionary["type"]
# 출력 - after
print("요소 제거 이후 : ", dictionary)
# 키가 존재하는지 확인 -> 값에 접근
# 딕셔너리 선언
dictionary = {
"name" : "7D 건조 망고",
"type" : "당절임",
"ingredient" : ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin" : "필리핀"
}
# 사용자로부터 입력 받기
key = input("> 접근하고자 하는 키 : ")
# 딕셔너리 내부에 키 유무 판별 - 키워드 'in' 사용
if key in dictionary :
print(dictionary[key])
else :
print("존재하지 않는 키에 접근하고 있습니다.")
# get() 함수
# 키가 '존재하지 않을' 때 - KeyError를 발생시키지 않고 'None'을 출력하는지 확인하기
# 딕셔너리 선언
dictionary = {
"name" : "7D 건조 망고",
"type" : "당절임",
"ingredient" : ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin" : "필리핀"
}
# 존재하지 '않는' 키에 접근
value = dictionary.get("존재하지 않는 키")
print("값 : ", value)
# None 확인 방법
if value == None :
print("존재하지 않는 키에 접근했었습니다.")
p.157쪽의 1번 문제의 답 쓰고 인증샷
# 리스트(list)
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.extend(list_a) # extend() : 한 번에 '여러' 요소 추가
print("extend():", list_a)
'''
extend(): [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]
'''
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.append(10) # append() : 요소 '하나' 추가 - 리스트 '뒤쪽'에
print("append():", list_a)
'''
append(): [0, 1, 2, 3, 4, 5, 6, 7, 10]
'''
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.insert(3, 0) # insert() : 요소 '하나' 추가 - 리스트 '특정 위치'에
print("insert():", list_a)
'''
insert(): [0, 1, 2, 0, 3, 4, 5, 6, 7]
'''
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.remove(3) # remove() : '값'으로 제거하기
print("remove():", list_a)
'''
remove(): [0, 1, 2, 4, 5, 6, 7]
'''
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.pop(3) # pop() : '인덱스'로 제거하기 (del 키워드와 동일)
print("pop():", list_a)
'''
pop(): [0, 1, 2, 4, 5, 6, 7]
'''
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.clear() # clear() : 모두 제거하기
print("clear():", list_a)
'''
clear(): []
'''
Chapter 04의 단원명은 '반복문'이다.
즉, 위에서 정리한 리스트, 딕셔너리, range() 개념 모두 '반복문'에서 주로 사용되는 개념들임을 잘 알아두고 나중에 실제로 써먹어보자.
파이썬을 되게 애매하게 공부했을 때는 리스트랑 딕셔너리 중에 뭐가 대괄호([])이고, 뭐가 중괄호({})로 묶어야 하는지 은근 헷갈렸는데,
제대로 공부해보니까 이거 뭐 헷갈릴 것도 아니었다 ㅋㅋㅋ
이번에는 어우 정리할 게 너무 많아서 중간에 좀 지칠 뻔했는데
아무튼... 다 정리해냈네..
이렇게 열심히 정리했으니까 절대 절대 까먹지 말자!!!