ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Do it! 자료구조와 함께 배우는 알고리즘 입문(파이썬) :: DAY 03 - 1
    알고리즘 2022. 11. 2. 15:01

    ch02. 기본 자료구조와 배열

     

    02-1 자료구조와 배열

    배열 (array)

    배열 : 묶음 단위로 값을 저장

    배열은 객체가 저장되며 배열에 저장된 객체 하나하나를 원소라고 한다

    이 원소들은 인덱스를 부여받는다

    배열에는 서로 다른 자료형을 같이 저장할 수 있으며, 배열 원소 자체를 배열에 저장할 수 있다

     

     

     

    리스트와 튜플

    리스트와 튜플은 데이터 컨테이너라고 하며 비슷한 기능을 하지만 원소를 변경할 수 있는지 없는지에 차이가 있다

     

     

     

    리스트의 기초

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

    연산자 [] 안에 원소를 쉼표로 구분하여 표기

    마지막 원소에 , 사용 가능

    list = ['A','B', 'C',]

    원소 없이 []만 사용하면 빈 리스트 생성

     

    파이썬 내장 함수인 list()를 사용하면 문자열이나 튜플 등 다양한 자료형 객체를 원소로 하는 리스트 생성 가능

    list01 = list()
    list02 = list('ABC')		# ['A', 'B', 'C'] 문자열의 각 문자로부터 원소를 생성
    list03 = list([1, 2, 3])
    list04 = list([1, 2, 3])	# 리스트로부터 원소를 생성
    				# 리스트, 튜플, 딕셔너리 모두 가능

     

    특정 범위의 정수로 구성된 리스트 만들기 위해서는 range() 사용

    list01 = list(range(7))			#[0, 1, 2, 3, 4, 5, 6]
    list02 = list(range(3, 8))		#[3, 4, 5, 6, 7]
    list03 = list(range(3, 13, 2))		#[3, 5, 7, 9, 11]

    range에서도 step을 설정할 수 있다는 부분이 헷갈렸었다

     

    리스트의 원소 개수는 리스트를 만들기 전에 반드시 결정해야 한다

    하지만 원솟값을 정하지 않는 리스트는 None을 사용하면 만들 수 있다

    list01 = [None]*5

     

     

     

    튜플의 기초

    튜플은 원소에 순서를 매겨 결합한 것으로 원소를 변경할 수 없는 이뮤터블 자료형이다

    튜플은 원소를 쉼표로 구분하여 나열한 뒤 결합 연산자 ()로 둘러싸는 방식이다

    맨 마지막 원소 뒤에 쉼표를 써도 되며, ()만 사용하면 빈 튜플 생성 가능하다

    튜플은 리스트와 다르게 연산자 ()를 생략할 수 있다

    tuple01 = ()		# () 빈 튜플
    tuple02 = 1,		# (1,)
    tuple03 = (1,)		# (1,)
    tuple04 = 'A', 'B',	# ('A', 'B')

    tuple02처럼 원소가 1개인 경우 뒤에 반드시 쉼표를 입력해야 하는데 쉼표가 없다면 단순 변수로 여기기 때문이다

     

    튜플도 파이썬 내장 함수인 tupe()을 사용하면 문자열이나 리스트 등 여러 가지 자료형 객체를 원소로 하는 튜플을 생성할 수 있다

    tuple01 = tuple()		# () 빈 튜플
    tuple02 = tuple('ABC')		# ('A', 'B', 'C') 문자열의 각 문자로부터 원소 생성
    tuple03 = tuple([1, 2, 3])	# (1, 2, 3) 리스트로부터 원소를 생성
    tuple04 = tuple({1, 2, 3})	# (1, 2, 3) 집합으로부터 원소를 생성

     

    리스트와 마찬가지로 특정 범위의 값을 원소로 갖는 튜플은 range() 이용

    tuple01 = tuple(range(3, 10, 2))

     

     

     

    리스트와 튜플 풀어내기

    리스트나 튜플의 원솟값들을 풀어 여러 변수에 대입하는 것을 언팩(unpack)이라고 한다

    # 리스트 x를 a, b, c에 대입
    x = [1, 2, 3]
    a, b, c = x
    a, b, c		#(1, 2, 3)

     

     

     

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

    슬라이스 : 리스트 또는 튜플의 원소 일부를 연속해서 또는 일정한 간격으로 꺼내 새로운 리스트 또는 튜플을 만드는 것

    s[:]		# s의 모든 원소 나열
    s[:n]		# s의 원소 중 맨 앞에서부터 n개까지 나열
    s[i:]		# s의 원소 중 s[i]부터 맨 끝까지 나열
    s[-n:]		# s의 원소 중 맨 끝에서부터 n개까지 나열
    s[i:j] 		# s[i]부터 s[j-1]까지 나열
    s[i:j:k] 	# s[i]부터 s[j-1]까지 k씩 건너뛰며 나열
    s[::-1]		# s의 원소 중 맨 끝에서부터 전부 출력

     

     

     

    슬라이스의 s[i:j:k]에서 i, j, k 정하는 규칙

    i, j가 len(s)보다 크면 len(s)가 지정된 것으로 간주한다. 인덱스와 달리 범위가 벗어나는 값을 지정해도 오류 아님

    i 가 없거나 none이면 0이 지정된 것으로 간주

    j 가 없거나 none이면 len(s)가 지정된 것으로 간주

     

     

     

    뮤터블과 이뮤터블의 대입

    n = 5
    id(n)	#140711199888732
    n = 'ABC'
    id(n)	#14711199888764

    변수에 어떤 값을 대입하면 값이 아니라 식별 번호가 바뀐다(상자가 아니라 그냥 이름 개념)

    즉, 어떤 자료형의 객체이든 상관없이 변수에 대입할 수 있다

     

    파이썬은 변수를 선언할 때 자료형을 선언하지 않더라도 변수 이름에 값을 대입하기만 하면 그 이름의 변수를 사용할 수 있도록 자료형을 자동으로 선언해 주는 기능이 있다

    어떤 변수에 여러 값을 한꺼번에 대입할 수 있는 기능도 제공

    a, b, c = 1, 2, 3

     

    코딩 테스트 준비를 하면서 자바랑 비교했을 때 이 부분이 큰 장점인 것 같다

    자바로 코드를 짜다가 파이썬으로 짜면 이 부분에서 크게 어색함이 느껴진다

     

     

     

    누적 변수

    누적 변수란 변숫값에 특정값을 더한 결괏값을 다시 대입하여 업데이트한 변수

     

     

     

    파이썬의 자료형

    파이썬의 자료형은 다음과 같이 2가지로 분류한다

    뮤터블 자료형 : 리스트, 딕셔너리, 집합 등이 있으며 값을 변경할 수 있다

    이뮤터블 자료형 : 수, 문자열, 튜플 등이 있으며 값을 변경할 수 없다

     

     

     

    대입 기호 = 

    대입 기호 = 를 연산식에서 사용하는 +, * 등과 같이 취급하지 않는다

    'x + 17' 은 식(statement)이지만 'x = 17' 은 식이 아니라 문(expression)이다

    +는 덧셈을 수행하는 연산자이고 =은 연산자가 아니다

     

    c, c++, java에서는 =를 결합 연산자로 사용하기 때문에 a = b = 1이 가능하다

    하지만 파이썬에서는 =는 연산자가 아니기 때문에  a= (b=1)을 입력 시 synteaxError: invalid syntax 오류가 발생한다

     

     

     

    자료구조의 개념

    자료구조(data structure)는 논리적인 관계로 이루어진 데이터 구성

    자료구조 : 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적 관계

    자료구조를 알아야하는 이유는 컴퓨터에서 처리해야 하는 많은 데이터를 모아 효율적으로 관리하고 구조화하는 데 있다

     

     

     

    빈 배열 판단

    배열에 원소가 하나도 없는지 확인하고 싶다면 배열을 참조하는 변수를 조건식 그대로 사용

    배열이 비어있다면 조건식의 결과는 False

    if x:
    	# x가 비어있지 않으면(True) 실해
    else:
    	# x가 비어 있으면(False) 실행

     

     

     

    등가성과 동일성

    파이썬에서 값을 비교할 때 등가성(equality)와 동일성(identity)을 사용한다

    등가성 비교는 ==, 동일성 비교는 is

    등가성 비교는 좌변과 우변의 값이 같은지 비교, 동일성 비교는 값은 물론 객체의 식별 번호까지 같은지 비교

     

    두 객체의 값이 같은지 비교 : ==

    두 객체의 값과 식별 번호가 같은지 비교 : is

     

     

     

    내포 표기 생성

    리스트 안에서 for, if문을 사용하여 새로운 리스트를 생성하는 기법을 내포 표기 생성이라고 한다

    numbers 리스트의 원솟값이 홀수인 경우에 그 원소에 *2를 하여 새 리스트(twise)를 생성한 예시

    numbers = [1, 2, 3, 4, 5]
    twise = [num * 2 for num in number if num % 2 == 1]
    print(twise)	#[2, 6, 10]
    728x90
Designed by Tistory.