본문 바로가기
Review/SW Jungle

[WEEK01] 배열과 자료구조 (python)

by jamiehun 2022. 9. 25.

[Do it 자료구조와 함께 배우는 알고리즘 입문 with 파이썬] 개념 정리

1) 배열

Python에서 List, Tuple (a.k.a. Data Container)

 

특징

: 묶음 단위로 값을 저장

: 하나하나는 원소라 부름

: 서로 다른 자료형을 같이 저장 가능

: 배열 원소 자체를 배열에 저장 가능함

 

1-1) 스캔

: 배열 원소를 하나씩 차례로 주목하여 살펴보는 방식 (traverse)

cf) 리스트 스캔하는 방법

1) 원소 수를 len(함수)로 미리 알아내서 range로 

2) enumerate( ) 함수 사용

3) 인덱스 x, in 사용 => 처음부터 순서대로 꺼냄

 

1-2) 주석, 자료형 hint ; annotation

from typing import Any, Sequence
def max_of(a:Sequence) -> Any:

: 매개변수 a의 자료형은 sequence ; mutable, immutable 가능

: 반환하는 것은 임의의 자료형인 Any

 

1-3) 모듈 (module)

: 하나의 스크립트 프로그램

: 확장자(.py)를 포함하지 않는 파일의 이름 자체를 모듈 이름으로 사용

 

__name__

: 모듈 이름을 나타내는 변수

: script program이 직접 실행될 때 __name__은 '__main__'

: script program이 임포트 될 때 변수 __name__은 원래의 모듈 이름

 

cf) 모듈 객체에는 __name__ 이외에도 __loader__, __package__, __spec__, __path__, __file__ 등이 있음

 

1-4) 리스트를 역순으로 정렬

1) 리스트 자기자신을 역순으로 정렬

: x.reverse( )

 

2) 역순으로 정렬한 리스트 생성

: list(reversed(x))

: x의 원소를 역순으로 꺼내는 이터레이터(반복자)를 반환

 

참고) n진수 구하기

 

2) 자료구조 (Data Structure)

: 논리적 관계로 이루어진 데이터 구성

: 데이터 단위와 데이터 자체 사이의 물리적 혹은 논리적 관계

: 컴퓨터에서 처리해야하는 많은 data를 모아 효율적으로 관리, 구조화

 

2-1) List

: mutable list형 객체 (원소 변경 가능)

 

특이점

list01 = list((1, 2, 3))  # [1, 2, 3]
list02 = list({1, 2, 3})  # [1, 2, 3]
list03 = [None] * 3       # [None, None, None]

 

2-2) Tuple

: immutable 자료형 (원소에 순서를 매겨 결합한 것으로 원소 변경 불가)

 

특이점

# 원소 1개만 갖는 튜플은 쉼표 필수
tuple01 = 1,                   # (1,)
tuple02 = (1,)                 # (1,)
tuple00 = (1)                  # 1; 튜플 아닌 int형 변수
tuple03 = 1, 2, 3              # (1, 2, 3)
tuple04 = 1, 2, 3,             # (1, 2, 3)
tuple05 = (1, 2, 3,)           # (1, 2, 3)
tuple06 = tuple('ABC')         # ('A', 'B', 'C')
tuple07 = tuple([1, 2, 3])     # (1, 2, 3) 
tuple08 = tuple({1, 2, 3})     # (1, 2, 3)

 

2-3) List & Tuple

if x:
	# x가 비어있지 않으면 true
else:
	# x가 비어있지 않으면 false
[1, 2, 3] < [1, 2, 4]

등가성(equality) : 값이 같은지 => ==

동일성(identity)  : 값과 식별번호 같은지 => is

 

2-4) 언팩 (unpack)

 

좌변에 여러개 변수, 우변에 리스트나 튜플

: 우변 원소를 좌변 변수에 한번에 대입 가능

x = [1, 2, 3]
a, b, c = x
a, b, c       # (1, 2, 3)

 

2-5) 슬라이스 (slice)

# s[i]부터 s[j-1]까지 k씩 건너뛰며 나열
s[i : j : k]

 

특징

1) i, j가 len(s)보다 크면 len(s)가 지정된 것으로 간주

2) i가 없거나 None이면 0이 지정된 것으로 봄

3) j가 없거나 None이면 len(s)가 지정된 것으로 봄

4) s[::-1]은 리스트 s의 원소 중 맨 끝부터 전부 출력

 

2-6) mutable과 immutable의 대입

mutable 자료형

: 리스트, 딕셔너리, 집합 등 값 변경 가능

 

immutable 자료형

: 수, 문자열, 튜플, 값 변경 불가

=> 값에 어떤 값 대입시 값 자체가 아닌 식별 변호가 바뀜

 

* 대입식은 값 자체가 아닌 참조하는 객체의 식별번호를 대입

* C, C++, java에서는 =를 결합연산자로 사용하나, python에서는 결합 연산자가 아님