티스토리 뷰

728x90
반응형

리스트

리스트의 특징

  • 리스트는 여러 데이터 타입이 섞여 있을 수 있다.

리스트 인덱싱 및 슬라이싱

  • 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() 등의 함수에 대입하여 자료형 변환 후 사용할 수도 있음.

Hashing

Hashing

Hash function

  • 임의의 길이의 데이터를 고정된 길이의 데이터로 맵핑하는 함수
  • 많은 레코드가 존재하는 데이터 테이블 혹은 데이터베이스에서 검색의 속도를 높여줌

Hash value

  • Hash function에 의해 얻어진 반환 값
  • 동일한 key에 대해서는 같은 hash value가 얻어지지만, 역은 보장되지 않음

Hashing in Python

  • 객체의 값에 따라 특정한 int 값을 부여함
  • 한 번의 실행 내에서는 부여되는 int 값이 유지됨
  • 새롭게 실행할 시, 부여되는 int 값이 변화할 수 있음
  • hash() : 객체의 class에 정의되어 있는 __hash__(self) 함수를 호출

hash() vs id()

id

  • 객체의 identity를 반환
  • 동일한 값을 갖더라도 다른 id 값을 갖는 경우 존재
  • 동일한 id 값을 갖는다면, 당연히 동일한 값을 가짐

hash()

  • 객체의 값을 hash function으로 맵핑한 정수 값을 반환
  • 동일한 값을 갖는 객체는 반드시 같은 hash value를 가짐
  • 같은 hash value를 갖더라도 값은 같지 않을 수 있음

값의 uniqueness를 체크하는 데에는 hash()가 더 효율적.
id 함수 : 모든 다른 id를 갖는 객체에 대해 추가로 equality 체크 수행
hash 함수 : 같은 hash value를 갖는 객체들에 대해서만 추가로 equality 체크를 수행

Hashable objects in Python

  • hashable : 객체가 생명주기 동안 절대 변경되지 않은 해시 값을 가지고 있을 경우 hashable이라고 말함
  • immutable 타입(숫자형, string, tuple 등)은 hashable
  • mutable 타입(List, set, dictionary 등)은 unhashable. 객체의 값을 변화시킬 수 있고, 값이 달라지면 hash value도 달라져야 하기 때문에 hashable object의 정의에 부합하지 않음


728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday
링크