새소식

반응형
CS 지식/자료구조와 알고리즘(Python)

[python] Python 기본

  • -
반응형

자료구조와 알고리즘 with 파이썬은 위와 같은 영어 교재를 기반으로 작성한 내용입니다.

 

자료구조와 알고리즘 카테고리에 python 문법이 있으셔서 놀랐겠지만 아무래도 파이썬으로 해당 부분을 진행해 나갈 것이기 때문에 기본적으로 알아야 하는 파이썬 문법들을 정리해 보았습니다.

 

만약 파이썬을 이미 잘 아시는 분이라면 해당 포스팅은 건너 뛰셔도 좋습니다!

 

1. Python Flow Control

프로그램은 통상적으로 순서에 따라 실행되지만 프로그램 실행의 흐름(flow)를 제어하기 위한 주된 두 가지 방식이 존재합니다.

  • conditional statements(is, else,...)
  • loops(for, while ...)

 

2. if - else statements

if...else 와 elif statement는 statement의 conditional execution을 control 합니다. general format은 일련의 if 와 elif statement와 잇따라서 오는 마지막의 else statement입니다.

x = 'one'
if x == 0:
    print("false")
elif x == 1:
    print("true")
else:
    print("Something else")
Something else

if - elif - else 가 같은 개행에 있는 경우 그 중 조건에 맞는 한 가지 경우의 코드 블럭만 실행합니다.

 

3. Equility operator(==) and is operator

  • '==' 는 objects (values) 자체를 비교합니다.
  • 'is' 는 두 변수가 같은 object를 가리키는 지 체크합니다.

 

4. range

  • range object는 range() function에 의해 생성됩니다.
  • 이는 sequence of number(숫자의 나열)를 포함합니다.
  • Immutable(변경 불가능) and iterable(순회 가능)
>>> a = range(5)
>>> type(a)
class 'range'
>>>
>>> b = a.__iter__()
>>> type(b)
class 'range_iterator'
>>>
>>> b.__next__()
0
>>> b.__next__()
1
>>> b.__next__()
2
>>> b.__next__()
3
>>> b.__next__()
4

 

5. for loops

a = range(5)
for i in a:
    print(i, end=' ')
print()    
for i in range(1, 7, 2):
    print(i, end=' ')
print()       
for i in range(1, -4, -1):
    print(i, end = ' ')
print()
0 1 2 3 4
1 3 5
1 0 -1 -2 -3
  • Python에서의 for loop 는 어느 iterable obejct가 가진 아이템 전체를 순회합니다.(list, string, 등등)

 

  • 사용법
range(start, end, step)

 

6. break / continue

for num in range(2, 5):
    if num % 2 == 0:
        print('Found an even number', num)
    print('Found an odd number', num)
// 실행 결과
Found an even number 2
Found an odd number 3
Found an even number 4

 

for num in range(2, 5):
    if num % 2 == 0:
        print('Found an even number', num)
        break
    print('Found an odd number', num)
// 실행 결과
Found an even number 2
  • break: 뒤의 코드는 건너 뛰고(skip) 반복문을 종료
  • continue: 뒤의 코드는 건너 뛰고(skip) 반복문의 맨 처음으로 이동

 

7. while loops

>>> x = 0
>>> while x < 4:
    x += 1
    print(x)
1
2
3
4
x = 0
while x < 4:
    x += 1
    if x % 2 != 0:
        continue
    print(x)
2
4

 

x = 0
while x < 4:
    x += 1
    if x > 2:
        break
    print(x)
1
2

 

x = 0
while x < 4:
    x += 1
    if x > 2:
        break
    print(x)
else:
    print('finished!')
1 
2

 

8. Built-in Data Types(내장 데이터 타입)

  1. List
  2. String

 

List

  • List는 파이썬에서 여러 요소를 담을 수 있는 표준 컨테이너입니다.
>>> a = ['p', 'r', 'o', 'b', 'e']
>>>
>>> a[0]
'p'
>>> a[4]
'e'
>>> a[-1]
'e'
>>> a[-5]
'p'

 

List is mutable(값을 바꿀 수 있는)

tuple, string은 인덱스로 값을 바꿀 수 없는 immutable data type입니다.

 

리스트의 값을 하나만 바꾸는 것은 만약 그 리스트의 이름이 a라면 a의 address는 기존의 address와 다르지 않지만 리스트를 새로 할당하면 주소가 바뀌게 됩니다.

 

기존의 리스트는 anonymous object(찾을 수 없는 객체)가 되고 이는 메모리 낭비를 하기 때문에 파이썬 시스템에는 이를 수집하여 없애는 garbage collection(쓰레기 수집)이 존재합니다.

a = [1,2,3]
print(id(a))

#modify the object
a[2] = 9
print(a, id(a))

#assign a new object
a = [1, 2, 9]
print(id(a))
2083801980552
[1, 2, 9] 2083801980552
2083801479944

 

List is iterable(순회하며 하나씩 값을 가져올 수 있는)

  • iterable object는 한 순간에 아이템 하나를 반환할 수 있습니다.
  • Iterable objects는 다음과 같은 곳에서 사용됩니다.
    • for loops
    • map() functions
a = [1, 2, 3, 'four']
for i in a:
    print(i, end=' ')
1 2 3 four

map() 함수는 우리가 앞으로 자료구조와 알고리즘을 진행하면서 굉장히 많이 사용되는 함수로 잘 기억해야 하는 함수 입니다.

 

List slicing

>>> a = ['p', 'r', 'o', 'b', 'e']
>>>
>>> a[1:4]
['r', 'o', 'b']
>>>
>>> a[:3]
['p', 'r', 'o']
>>>
>>> a[::-1]
['e', 'b', 'o', 'r', 'p']

slicing된 리스트들은 다시 어떤 변수에 넣지 않는 이상 새로운 object가 만들어진 것이기 때문에(id가 다른) anonymous object 가 됩니다.

 

add/change List elements

>>> a = [2,4,6]
>>>
>>> a[0] = 1  # change an item
>>> a
[1, 4, 6]
>>> a[1:3] = [3, 5]    # change a range of items
>>> a
[1, 3, 5]
>>> a.append(7)    # add one item
>>>a
[1, 3, 5, 7]
>>>a.extend([9, 10]) # add multiple items
>>>a
[1, 3, 5, 7, 9, 10]
>>>
>>> a.append([13,15]) # add one item
>>>a
[1, 3, 5, 7, 9, 10,[13, 15]]

 

delete/remove List elements

>>> a = ['a', 'b', 'c', 'd', 'e']
>>> del a[2] # delete one item
>>> a
['a', 'b', 'd', 'e'] 
>>> del a[1:3]    # delete multiple items
>>> a
['a', 'e']
>>>
>>> a = ['a', 'b', 'c', 'd', 'e']
>>> a.remove('c')    # remove one item
>>> a
['a', 'b', 'd', 'e']
>>>
>>> a.pop(2) # remove and return one item , 추출
'd'
>>> a.pop() # remoe and return the last item: stack에서 pop의 정의 
'e'
>>> a
['a', 'b']
>>> a.clear() # empty a list
>>> a
[]

 

String is immutable and iterable

스트링은 그 안의 값을 배열의 인덱스로 접근하여 값을 바꾸는 행위가 불가능하나 하나하나씩 순회는 가능합니다.

data = ['have', 'a', 'nice', 'day']
one_string = ' '.join(data)
print(one_string)
have a nice day

 

Functions

def absolute(num): #absolute라는 변수가 함수 object를 가리키고 있는 것
    if num >= 0:
        return num
    else:
        return -num

print(absolute(2), absolute(-3))
#2 3

absolute(2) 에서 안에 넣어주는 인자가 argument이고,

def absolute(num)에서 안에 넣어주는 인자는 parameter입니다.

 

local/global variable

def test():
    a = 512
    print(a, id(a)) #local variable

a = 512 #global variable
print(a, id(a))
# 512 2297106833872

test()
# 512 2297106833776

문법상 문제는 없지만 되도록 오해를 방지하기 위해서 local과 global 변수를 같은 variable name은 피하도록 해야합니다.

 

Function parameters

1. 함수로 넘긴 인자의 값이 바뀌게 할 경우

#All parameters in Pythion are passed by reference

def list1(a):
    a.append(9)
    print('inside the function: ', a)

b = [1, 2, 3]

list1(b)
#inside the function: [1, 2, 3, 9]

b
#[1, 2 ,3, 9]


2. 함수로 넘긴 인자의 값이 바뀌지 않길 바라는 경우

#Reference link is broken if we assign a new object

def list2(a):
    a = a[:] #local 변수로 뒤집어 씌운다.
    a.append(9)
    print('inside the function: ', a)

b = [1, 2, 3]

list2(b)
#inside the function: [1, 2, 3, 9]

b
#[1, 2 ,3]

list2 함수에서 만들어졌던 리스트는 함수가 종료후 garbage(anonymous object)가 됩니다

 

Multiple return values

def power(num):
    return num**2, num**3

a, b = power(2)

print(a, b)
#4 8

a = power(3)
print(a)
#(9, 27)

multiple return values는 tuple 형식으로 반환됩니다.

 

Input

input() 함수는 표준 입력(키보드와 문자열로 반환하는 어떤 것)으로부터 한 줄씩 읽어들입니다.

>>> a = input()
Hello!
>>> type(a)
<class 'str'>
>>> a
'Hello!'
>>>
>>> #read a number from the keyboard
>>> n = int(input())
123
>>> type(n)
<class 'int'>
>>> n
123

 

수업 실습 관련

백준 사이트 이용

제한 조건 중 시간 제한이 매우 중요합니다.

 

Python Classes

  1. Class and object
  2. Defining a class
  3. Modules

 

Data types

  • 데이터 타입은 두 부분으로 구성되어있습니다. 
    • 변수 집합
    • 변수에 수행할 수 있는 함수

 

Classes and Objects

  • Class(클래스)데이터 타입의 정의라고 볼 수 있습니다. 
    • 하나의 클래스는 그 자신의 value와 함수를 가집니다.
    • Built-in classes(내장 함수): int, float, string, etc.
    • 우리는 새로운 클래스를 만들 수 있습니다. -> 새로운 데이터 타입을 만들어내는 것과 마찬가지.
  • Obejct(객체)는 데이터 타입의 변수입니다. 
    • 클래스 정의에 의해 만들어진 메모리 상의 값
    • 클래스의 인스턴스(혹은 entity)

 

파이썬에서 숫자와 문자열에 대한 타입을 찾아보면 'int'와 'str' 클래스라는 것을 알 수 있습니다.

 

(User-defined) Classes의 예시

Defining a class

클래스를 정의하는 예시입니다.

 

Making objects of a class

클래스의 객체를 만드는 예시입니다.

 

 

Inheritance(상속)

Inheritance는 새로운 class(즉, derived class로 알려진) 가 기본 클래스라고 불리는 다른 class로부터 만들어지는 과정입니다.

 

A derived(유도된) class는 자동으로 base class가 가진 부수적인 모든 멤버 변수들과 모든 ordinary member functions을 가지고, 추가적인 멤버 함수과 추가적인 멤버 변수들을 가질 수 있습니다.

 

일반적으로, 새로운 classes는 inheritance를 통해 더 빠르고 쉽고, 더 싸게 만들어질 수 있습니다.(그것들을 scratch를 통해 쓰는 것보다)

Inheritance는 software 재사용의 아이디어를 돕는 한 가지 방법입니다.

 

Save the class definitions

image

만든 class definition을 저장하는 방식입니다.

 

Python Modules

  • Module은 .py 확장자으로 된 파일을 말합니다.
  • 이는 당신의 어플에 넣길 원하는 클래스나 함수를 포합합니다
  • module을 import 할 수 있는 몇개의 방식이 존재합니다:
    • import <module>

  • import <module> as <alias>

  • from import <class/function>

 

Module-related terms (module관련 용어 정리)

  • Script
    • 직접적으로 실행되기로 의도된 파이썬 파일(.py 확장자) 
  • Module
    • A Python (.py extension) file that contains collections of functions, global variables, and classes
    • 함수, 전역 변수, 클래스들의 모음을 포함하는 파이썬 파일(.py 확장자)
  • Package
    • 모듈의 모음집을 갖는 디렉터리
  • Library
    • "code의 한 다발"을 느슨하게 의미하는 일반적인 용어
    • 이는 10개 혹은 100개의 개인적인 모듈을 가질 수 있다.
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.