[Python] Chapter2 : 기본 자료구조와 알고리즘

daymoon_·2021년 12월 29일
0
post-thumbnail

🔊 주의사항

책에 있는 실습과 내용을 똑같이 적으면 저작권 문제가 될 수도 있기 때문에 약간의 변형을 하여 작성하였습니다. (특히, 실습 코드)


📚 02-1 자료구조와 배열

배열

🔎 참고자료
wikidocs 리스트 자료형
TCP School 리스트(list)

따로따로 흩어진 변수를 하나로 묶어서 사용하여 코드를 쉽고 효율적으로 작성할 수 있다.

  • 배열(array) : 묶음 단위로 값을 저장
  • 원소(element) : 배열에 저장된 객체 하나하나
# 일반
item1 = '연필'
item2 = '지우개'
item3 = '볼펜'
item4 = '책가방'

# 배열 : list 선언
items = ['연필', '지우개', '볼펜',' 책가방']

리스트와 튜플

🪄 리스트

리스트는 원소(element)를 변경할 수 있는 뮤터블(mutable) 리스트(list)형 객체이다.

# 빈 리스트 생성
list1 = []
list2 = list()

# 리스트 안에 원소 생성
list3 = ['a', 'b', 'c']
list4 = [1,2,3]

# python 내장함수 list()를 사용하여 생성
list5 = list('abc')
list6 = list([11,22,33])
list7 = list((11,22,33))
list8 = list({11,22,33})

범위를 지정하여 리스트를 생성할 수 있다.

# 0~5 까지 생성
list1 = list(range(6))
print(f'list1 : {list1}')

# 1~9 까지 생성
list2 = list(range(1,10))
print(f'list2 : {list2}')

# 1~9 까지 생성 & step2 (2칸 걸러 생성)
list3 = list(range(1,10, 2))
print(f'list3 : {list3}')

# 0~15 까지 생성 & step 3 (3칸 걸러 생성)
list4 = list(range(0, 16, 3))
print(f'list4 : {list4}')

리스트 안에 원소(element)값을 정하지 않고 생성할 수 있다.

list1 = [None] * 9
print(list1)

🪄 튜플

🔎 참고자료
wikidocs 튜플 자료형
파이썬 코딩 도장 10.2 튜플 사용하기

원소에 순서를 매겨 결합한 것으로 원소를 변경할 수 었는 이뮤터블(imutable) 자료형이다.
즉, 변경과 삭제가 불가능하다.

# 빈 튜플 생성
tuple1 = ()
tuple2 = tuple()

# 튜플에 원소 생성
tuple3 = (10,20,30)
tuple4 = ('A','B','C', )
tuple5 = 10, 20, 30
tuple6 = 10, 20, 30, 
tuple7 = 'A', 'B', 'C'

# python 내장함수 tuple()를 사용하여 생성
tuple8 = tuple('abcde')
tuple9 = tuple([11,22,33,44])
tuple10 = tuple({11,22,33,44})

튜플의 원소가 1개인 경우 python이 단순 변수로 이해하기 때문에 반드시 마지막에 ,(쉼표)를 입력해야 한다.

범위를 지정하여 튜플을 생성할 수 있다.

# 0~99 까지 생성
tuple1 = tuple(range(100))

# 10~20 까지 생성
tuple2 = tuple(range(10, 21))

# 10~100 까지 생성 & step 10 (10칸 걸러 생성)
tuple3 = tuple(range(10, 101, 10))

# 10~30 까지 생성 & step 3 (3칸 걸러 생성)
tuple4 = tuple(range(10, 31, 3))

🪄 리스트와 튜플 풀어내기

🔎 참고자료
W3Schools Unpack Tuples

좌변에는 여러 개의 변수를 놓고 우변에는 리스트나 튜플을 놓으면, 우변의 원소를 좌변의 변수에 한번에 대입 가능하다.

# 리스트
name = ['kate', 'smith', 'luna', 'amy', 'selena']
# 리스트 name의 원소를 n1, n2, n3, n4 ,n5에 하나 씩 대입
n1, n2, n3, n4, n5 = name
print(n1, n2, n3, n4, n5)


# 튜플
books = ('익스플로링 아두이노', '의학 세계사', '서양 음악의 이해', '회로이론')
# 튜플 book의 원소를 book1, book2, book3, book4에 하나 씩 대입
book1, book2, book3, book4 = books
print(book1, book2, book3, book4)

인덱스로 원소에 접근하기

인덱스의 첫 시작은 무조건 0부터 시작이다. 만약 인덱스가 뒤에서 시작하면 -1부터 시작한다.


슬라이스식으로 원소에 접근하기


📚 02-2 배열이란?

배열 원소의 최댓값 구하기

🔎 참고자료
ruestone 9.3 Traversing a list

배열 원소를 하나씩 차례대로 주목하여 살펴보는 방식을 스캔(scan) 알고리즘이라 한다.
스캔은 주사 또는 트래버스(traverse)라고도 한다.


주석과 자료형 힌트

  • Any : 제약이 없는 임의의 자료형
  • Sequence : 시퀸스형(sequence type) ▶ 시퀀스형에는 리스트(list), 바이트 배열(byte array), 문자열(str), 튜플(tuple), 바이트열(bytes)형이 존재한다.
# 건네받은 매개변수 a의 자료형은 Sequence
# 반환하는 것은 임의의 자료형 Any
def max_of(a: Sequence) -> Any

🪄 함수 어노테이션(annotation, 주석달기)

🔎 참고자료
파이썬 코딩 도장 파이썬 타입 어노테이션

타입에 대한 힌트를 알려주는(hinting) 정도이다. 즉, 함수 어노테이션은 함수의 매개변수와 반환값을 나타내는 역할을 한다.

# 함수의 return값을 -> 타입으로 명시할 수 있다.
def cal_multi(a: int, b: int) -> int:
	return a*b

재사용할 수 있는 모듈 작성하기

🔎 참고자료
파이썬 코딩 도장 45.2 모듈과 시작점 알아보기
madplay

  • 모듈(module) : 하나의 스크립트 프로그램
# 현재 스크립트 파일이 실행되는 상태를 파악하기 위해 사용한다.
# 즉, 최초 시작점 설정
if __name__ == '__main__'

리스트를 역순으로 정렬하기

  • reverse() 함수 이용
a = [1,2,3,4,5,6]

a.reverse()
print(a)
  • reversed() 함수 이용
a = [1,2,3,4,5,6]

result = list(reversed(a))
print(result)

기수 살펴보기

🪄 10진수(decimal)

10 종류 0 1 2 3 4 5 6 7 8 9으로 표현한다.

  • 1자릿수 : 0~9까지
  • 2자릿수 : 10~99까지
  • 3자릿수 : 100~999까지

🪄 8진수(ocatal)

8종류 0 1 2 3 4 5 6 7로 표현한다.

  • 1자릿수 : 0~7까지
  • 2자릿수 : 10~77까지
  • 3자릿수 : 100~777까지

🪄 16진수(hexadecimal)

16종류 0 1 2 3 4 5 6 7 8 9 A B C D E F로 표현한다.


얕은복사와 깊은복사

🔎 참고자료
wikidocs 깊은 복사와 얕은 복사
programiz shallow copy and deep copy

🪄 얕은 복사(shallow copy)

참조값만 복사하는 방식 ▶ 객체가 참조 자료형 멤버를 포함할 경우 얕은 복사
즉, 참조가 같다 == id가 같다

🪄 깊은 복사(deep copy)

전체 복사 ▶ 객체가 갖는 모든 멤버(값과 참조 형식 모두)를 복사
즉, 참조가 다르다 == id가 다르다


🍴 수정 및 추가

  • 2021.12.31
    1. 재사용할 수 있는 모듈 작성하기 ▶ 내용 추가
profile
미지의 공간🌙

0개의 댓글