티스토리 뷰
오늘은 리스트, 튜플, 딕셔너리 그리고 세트 자료형에 대한 강의를 들었습니다. 알고 있던 내용도 많았지만 굳이 외우지 않았던 부분이나 세트와 같은 생소한 개념도 있었기에 조작 함수에 관련해서는 풀셋으로 정리해 봤으며, 심화내용 또한 저가 알고 있는 선에서는 정리했습니다.
리스트 자료형
리스트 조작 함수
append()
- 리스트 맨 뒤에 항목을 추가
pop()
- 리스트 맨 뒤의 항목 제거, 스택 구현할 때 사용!!
sort()
- 정렬
reverse()
- 순서를 역순으로
index(찾을 값)
- 지정한 값을 찾아 해당 위치 반환
insert(위치, 값)
- 지정된 위치에 값을 삽입
remove(지울 값)
- 리스트에 저장한 값을 삭제(여러 개일 경우 첫 번째 값 삭제)
extend(추가할 리스트)
- 리스트 뒤에 리스트 추가, 더하기 연산과 동일
count(찾을 값)
- 리스트에서 해당 값의 개수 출력
clear()
- 리스트의 내용을 모두 삭제
del(리스트명[위치])
- 리스트에서 해당 위치의 항목을 삭제한
len(리스트명)
- 리스트의 크기 출력
새 리스트 = 리스트.copy()
- 리스트의 내용을 새로운 리스트에 복사
sorted(리스트)
- 리스트의 항목을 정렬해서 새로운 리스트에 대입
sort vs sorted
sort는 리스트형의 메소드
리스트.sort() (O)
리스트 = 리스트.sort() (X)
sorted는 내장함수
A = sorted(B)
-> B 리스트를 정렬한 값을 A에 대입, 즉 B가 실제로 정렬되진 않음.
튜플 자료형
튜플 -> 리스트 변환: list(튜플)
리스트 -> 튜플 변환: tuple(리스트)
딕셔너리 자료형
딕셔너리 조작 함수
clear()
- 딕셔너리 내용을 모두 지움
copy()
- 딕셔너리 복사
items()
- 모든 데이터의 (키, 값)을 모두 반환
ex) for key, val in dict.items():
get(키)
- 키에 해당하는 값만 반환
- 대괄호 방식과는 다르게 예외처리를 해줌 -> 유연한 대응 가능!
keys()
- 키만 반환
ex)
for k in dict.keys():
values()
- 값만 반환
ex)
for k in dict.values():
update(딕셔너리)
- 딕셔너리에 딕셔너리를 추가
ex)
dict = {}
dict.update({'a' : 1, 'b': 2})
딕셔너리의 정렬
책에서는 operator 정렬로 설명하지만 다양한 방법들을 정리해 봅시다.
dict = {'Test': 11, 'Test2': 22, 'Test3': 33, 'Test4': 44}
(Key 기준 오름차순 정렬) = sorted(dict.items())
(Key 기준 오름차순 정렬) = sorted(dict.items(), key=operator.itemgetter(0))
(Value 기준 오름차순 정렬) = sorted(dict.items(), key=lambda x: x[1])
(Value 기준 오름차순 정렬) = sorted(dict.items(), key=operator.itemgetter(1))
'''
# 여기서 dict.items()를 받는 이유는 단순히 dict만 받을경우 이는 Key만 반환하기 때문
# Key, Value 모두 반환될 필요가 있음
# 위의 값들은 모두 리스트 안에 튜플로 2중 배열형식으로 저장됨,
# [('Test', 11), ('Test2', 22), ('Test3', 33), ('Test4', 44)]
'''
딕셔너리에 접근하기
교수님께서 딕셔너리 접근하는 방법으로 3가지를 제시했다. (책에는 없고 ppt자료에만 있다고 말씀하심)
방법 1.
for k in singer.keys():
# k: Key, singer[k]: Value
방법 2.
for k in singer:
# k: Key, singer[k]: Value
방법 3.
for k,v in singer.items():
# k: Key, v: Value
모두 알 필요가 있으니 외우자
세트 자료형
세트는 키만 모아 놓은 딕셔너리의 특수한 형태
-> 키는 중복이 안되므로 세트 자료형에서 중복은 제거됨.
MySet = {1, 2, 3, 4, 5, 2, 2, 3, 2, 1}
MySet
'''
# result: {1, 2, 3, 4}
# 중복이 제거됩니다.
'''
set(자료형) 함수는 리스트. 튜플, 딕셔너리 등을 세트 자료형으로 변환
** 자료형에 딕셔너리 자료형 변수를 넣을 경우 Key만으로 세트 생성
빈 세트 생성 : a = set() # a = {} 사용 x, 이것은 빈 딕셔너리를 생성함.
컴프리헨션
리스트 = [수식 for 항목 in range() if 조건식]. # 대괄호 필수
NumList = [i**i for i in range(1, 20) if i % 2 == 0]
enumerate() 함수
NumList = ['ㅋ'*i for i in range(1, 10)]
for index, val in enumerate(NumList):
print('반복문 횟수:', index)
print('리스트 값:', val)
리스트 복사 copy()를 사용해야 하는 이유 + 추가내용
책에서는 리스트의 복사에 대해 주의를 요한다. 왜냐하면 단순히 ListA = ListB로 복사할 경우 같은 메모리 공간을 공유하기 때문에 제대로 된 복사가 되지 않았기 때문이다. (리스트 A를 수정할 경우 그 작업이 리스트 B에도 영향을 미친다. 사실 이름만 다르지 같은 것)
이를 해결하기 위해 책에서는 copy() 함수를 설명한다.
list_ = ["ㄱㄴㄷ", "ABC"]
############ 방법 1. ############
list_Copy = list_.copy() # copy() 함수
list_Copy.append("123")
print(list_Copy)
# result: ["ㄱㄴㄷ", "ABC", "123"]
############ 방법 2. ############
list_Colon = list_[:] # 콜론 이용
list_Colon.append("987")
print(list_Colon)
# result: ["ㄱㄴㄷ", "ABC", "987"]
################################
print(list_)
# result: ["ㄱㄴㄷ", "ABC"]
하지만 copy() 함수는 Shallow Copy이기 때문에 2차원 배열에서의 문제는 해결하지 못한다.
이를 해결하기 위해서는 copy 모듈의 deepcopy() 함수를 이용하면 된다. (책에서 콜론을 통해 복사하는 것을 깊은 복사라고 하는데, 이는 틀린 내용이다. 따로 교수님이 언급하시진 않았기 때문에 물어볼 예정)
import copy
list_ = ["ㄱㄴㄷ",["123","ㅁㄴㅇㄹ"]]
list_Copy = copy.deepcopy(list_)
list_Copy[1][0] = ["수정됨"]
print(list_)
# result: ["ㄱㄴㄷ",["123","ㅁㄴㅇㄹ"]]
print(list_Copy)
# result: ["ㄱㄴㄷ",["수정됨","ㅁㄴㅇㄹ",]]
'CODING > Python' 카테고리의 다른 글
| 경북대 예비대학 파이썬교육 (기말고사 전 마지막정리) (0) | 2023.02.21 |
|---|---|
| 경북대 예비대학 파이썬교육 (6일차) (문자열, 함수와 모듈, 클래스) (0) | 2023.02.20 |
| 경북대 예비대학 파이썬교육 (중간고사 문제 + 4일차) (0) | 2023.02.17 |
| 경북대 예비대학 파이썬교육 (3일차 + 중간고사 전 마지막정리) (0) | 2023.02.16 |
| 경북대 예비대학 파이썬교육 (2일차) (0) | 2023.02.15 |