리스트
리스트의 특징
- 리스트는 여러 데이터 타입이 섞여 있을 수 있다.
리스트 인덱싱 및 슬라이싱
- sequence[start_index:end_index:step] : 시퀀스 내에서 start_index와 end_index 사이의 구간에 포함되며, start_index로부터 step 만큼씩 index를 증가시켜 가며 슬라이싱.
list1 = [11, 33, 55, 22, 44, 89]
print(list[2:6:2]) # 55, 44
print(list[::2]) # 11, 55, 44
리스트 클래스 내장 함수
- extend(sequence) : 시퀀스 타입 데이터를 현재 리스트의 뒤에 추가. list object를 expend 하면 liset안에 있는 item 개별로 append.
- index(item) : 지정된 아이템이 처음 등장한 인덱스 반환, 없으면 에러 발생
- count(item) : 지정된 아이템의 등장 횟수 반환
list_ex = [1, 2, 3, 4, 5]
list_ex.extend([-1, -2])
print(list_ex) # 1, 2, 3, 4, 5, -1, -2
list_ex.extend('bb')
print(liset_ex) # 1, 2, 3, 4, 5, -1, -2, 'b', 'b'
list_ex = [1, 2, 3, 2]
print(list_ex.index(2)) # 1
print(list_ex.count(2)) # 2
Mutable, Immutable
Mutable
- 객체의 값을 수정할 수 있음
- 새로운 객체의 생성 없이 해당 객체의 값을 변경 가능
- 새로운 객체를 생성하는 것 역시 가능
- ex) list, dictionary, 만든 객체
- Call-By-Reference
a = [1, 2, 3, 4]
b = a
a.append(-1)
print(a, b) # [1, 2, 3, 4, -1] [1, 2, 3, 4, -1] 새로운 객체의 생성 없이 해당 객체의 값을 변경
a = [1, 2, 3, 4]
b = a
a = a[:] + [-1]
print(a, b) # [1, 2, 3, 4, -1] [1, 2, 3, 4] 새로운 객체를 생성(슬라이싱을 통해)
Immutable
- 객체의 값을 수정할 수 없음
- 객체의 값으로 연산을 수행할 경우, 새로운 객체가 생성됨
- 예외 케이스 존재(연산 결과 동일, immutable 내에 mutable element가 존재할 경우)
- ex) int, float, str
- Call-By-Value
a = 1
b = a
a += 1
print(a, b) # 2, 1
Class 내장 함수들의 작동 방식
문자열
- 대부분의 내장 함수가 새롭게 생성된 객체를 반환
리스트
- 대부분의 내장 함수가 기존 객체를 직접 수정
File Handing
with 구문을 활용한 더 간편한 방법
- open을 통해 생성된 파일 객체가 변수 f에 할당
- with 구문 종료 후 자동으로 close() 호출
- 사용자가 명시적으로 close 함수를 호출하지 않아도 됨
with open('test.txt', 'w') as f:
pass
파일 읽기
- for 문을 통해 한 줄 씩 읽어 변수에 문자열을 할당할 수 있음
f = open('sample.txt' , 'r')
for line in f:
print(line)
f.close()
Set
집합(Set) 자료형 생성
집합 자료형 생성
- List, tuple과 마찬가지로 여러가지 자료형의 값들이 아이템으로 공존 가능
- 아이템을 포함하지 않은 빈 {}를 사용할 경우에는 집합 자료형이 아닌 dictionary 자료형이 생성
Set() 함수 사용
- List, tuple, string 등의 시퀀스 데이터 타입을 대입시 시퀀스 데이터 타입 내 각 아이템들이 집합 자료형의 아이템으로 포함됨
- 다른 시퀀스 자료형을 변환 가능(list(), tuple(), str())
집합 자료형의 특성
Mutable 타입
- List 자료형과 마찬가지로 Mutable 타입
- Tuple, string 자료형은 immutable 타입
List 자료형과 차이점
- 집합 자료형 객체 생성 시, 중복 아이템들은 제거되고 유니크한 아이템들만이 남음
- 순서가 지정되지 않음. for loop에는 사용 가능하나, 순서가 일정하지 않음
- Indexing, slicing 등을 사용 불가
아이템 추가 및 삭제
아이템 추가
- add(item) 메서드를 통해 새로운 아이템을 추가할 수 있음
- 객체 자체 수정. id 안바뀜.
아이템 삭제
- remove(item) 메서드 사용, 아이템이 존재하지 않을 시 에러 발생
- discard(item) 메서드 사용, 아이템이 존재하지 않아도 에러 발생하지 않음
여러 아이템을 한번에 추가
- update(item) 메서드를 통해 새로운 아이템을 추가
- 객체 자체 수정
모든 아이템 삭제
- clear() 메서드 사용
집합 간 비교
- issubset(), issuperset() 활용
- ==, !=, >=, <=, >, < 연산자 활용
집합 연산
교집합
- intersection(), & 활용
합집합
- union(), | 연산자 활용
차집합
- difference(), - 연산자 활용
기타
- List 자료형과 동일하게 len(), max(), min(), sum() 사용 가능
- in, not in 연산자로 특정 객체가 집합 객체에 포함되어 있는지 여부를 확인 가능
- for 문에 활용 가능하지만 순서는 일정하지 않음
Dictionary
Dictionary 자료형의 특성
- Mutable 타입
- Hashable objects만이 key로 사용 가능
- Hashable objects, Unhashable objects 모두 사용 가능
Methods of Dictionary
get(key, [default])
- Key에 대응되는 value 반환
- Key가 존재하지 않으면 None 객체 반환
- Key와 함께 default 값을 argument로 대입하면, key가 존재하지 않았을 때에 None대신 default 값을 반환
pop(key)
- Key에 대응되는 value 반환
- 해당 key/value 쌍은 객체에서 삭제
- Key가 존재하지 않을 시, 에러 발생
keys()
- key들을 포함하는 시퀀스 반환
- dict_keys 타입
values()
- value들을 포함하는 시퀀스를 반환
- dict_values 타입
items()
- (key, value) 튜플들을 포함하는 시퀀스를 반환
- dict_items 타입
keys(), values(), items()의 반환 값은 수정과 indexing 사용이 불가능하지만, for문에서는 가능.
List(), tuple() 등의 함수에 대입하여 자료형 변환 후 사용할 수도 있음.