Python Tutorial

Python Tutoral

Python 특징

  • 프로그래머 친화적 언어 - 사용하기 쉽다.
  • 표현적 언어 - 코드를 더 쉽게 이해할 수 있다.
  • 인터프리트 언어 - 한줄씩 실행하여 디버깅하는 것이 쉽다.

jupyter notebook

주피터 노트북 (Jupyter Notebook)은 머신러닝과 데이터 사이언스에서 많이 사용되는 툴이다. 웹 브라우저에서 파이썬 코드를 라인 별로 실행하고 마크다운을 지원한다.

설치 pip install Jupyter
실행 jupyter notebook

String

길이 알아보기, 원하는 길이만큼 출력하기.

string = "Hello World"
len(string) # 11
string[0:5] # Hello
string[:5]
string[6:11] # World
string[6:]

문자열을 리스트로 나누기.

string = "Hello, World, Soovin, Jeemyeong"
string.split(", ") # ['Hello', 'World', 'Soovin', 'Jeemyeong']

%s 포맷 코드. 문자열 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있다.

"I have %s apples" % 3 # 'I have 3 apples'
"rate is %s" % 3.234 # 'rate is 3.234'

String 숫자, 알파벳 판별

isdigit() : 숫자로만 구성되있는지 확인해주는 함수
isalpha() : 문자로만 구성되있는지 확인해주는 함수

    str = '123'
    str.isdigit() # True
    str = 'abc'
    str.isalpha() # True

List

리스트에 추가하기, 제거하기.

say_hi = ["Hello", "Hi"]
say_hi.append("HEHE")
say_hi # ["Hello", "Hi", "HEHE"]
say_hi.pop() # 숫자를 넣으면 인덱스에 해당하는 값을 제거한다. 없는 경우는 마지막 값을 뺀다.
say_hi # ["Hello", "Hi"]

리스트 안에 리스트 넣기.
안에 있는 리스트(say_hi)에 값을 추가하게 되면, 리스트 자체가 바뀌기 때문에 두번째 say_hi 리스트에도 ‘Yo’가 추가된다.

nested_ary = [say_hi, say_hi]
nested_ary[0].append("Yo")
nested_ary # [['Hello', 'Hi', 'Yo'], ['Hello', 'Hi', 'Yo']]

리스트 원하는 길이만큼 출력, 문자열로 합치기.

ary_list = ['Hello', 'World', 'Soovin', 'Jeemyeong']
ary_list[1:3] # ['World', 'Soovin']
", ".join(ary_list) # "Hello, World, Soovin, Jeemyeong"

정렬. sort()는 void함수이기 때문에 리스트를 출력하지 않는다.

ary_list.sort() # None (void 함수)
ary_list # ['Hello', 'Jeemyeong', 'Soovin', 'World']

sorted(리스트)는 리스트를 바로 출력한다.

ary_list = ['Hello', 'World', 'Soovin', 'Jeemyeong']
sorted(ary_list) # ['Hello', 'Jeemyeong', 'Soovin', 'World']

sorted에 reverse를 하게 되면 반대로 정렬이 된다.
key=lambda x: len(x)를 이용하면, 길이 순서대로 정렬된다.

sorted(ary_list, reverse=True) # ['World', 'Soovin', 'Jeemyeong', 'Hello']
sorted(ary_list, key=lambda x: len(x)) # ['Hello', 'World', 'Soovin', 'Jeemyeong']

Dictionary

HashMap과 같이, 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,) 로 구분되어 있다.
(※ Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.)

dic = {
  "Hello": "World",
  "Jeemyeong": {
    "Soovin": 3
  }
}
dic["Jeemyeong"]["Soovin"] # 3
# dic.add(4) # AttributeError: 'dict' object has no attribute 'add'

추가, 삭제하기.

# HashMap
# dic = dict()
dic = {}
dic["Soovin"] = "Jeemyeong" # {'Soovin': 'Jeemyeong'}
dic[1] = 2 # {'Soovin': 'Jeemyeong', 1: 2}
del dic[1] # {'Soovin': 'Jeemyeong'}

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
'name' in a # True
'email' in a # False

Set

중복을 허용하지 않는다.
순서가 없다(Unordered). a = {} 와 같이, 값이 없을경우에는 딕셔너리로 인식하게 된다.

s1 = set() # 값이 비어있는 집합 자료형
s1 = [1, 2, 3]
print(set(s1))   # {1, 2, 3}
s2 = set("Hello")
print(s2)   # {'H', 'o', 'e', 'l'}
인덱싱

set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 해야 한다.

s1 = set(s1)
l1 = list(s1)
print(l1)   # [1, 2, 3]
print(l1[0])   # 1
t1 = tuple(s1)
print(t1)   # (1, 2, 3)
print(t1[0])   # 1
집합

set 자료형이 정말 유용하게 사용되는 경우는 다음과 같이 교집합, 합집합, 차집합을 구할 때이다.

s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8, 9}

print('교집합', s1 & s2)   # {4, 5, 6}
print('합집합', s1 | s2)   # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print('차집합', s1 - s2)   # {1, 2, 3}
print('합집합-교집합', s1 ^ s2)   # {1, 2, 3, 7, 8, 9}
추가
s1 = {1, 2, 3}
s1.update([4, 5, 6])    # 여러 개 업데이트
s1.add(4)   # 1개 추가
print(s1)   # {1, 2, 3, 4, 5, 6}
제거
s1.remove(2)
print(s1)   # {1, 3, 4, 5, 6}

If

if False:
    print("Hello")
else:
    print("World")

c = True
# if c == True:
if c is True:
    c # True

a = 1 if 9 % 5 == 4 else 2 # 1
a = 1 if 9 % 5 == 3 else 2 # 2

While

cnt = 0
# while(cnt < 10) {}
while cnt < 10:
    cnt += 1
    cnt # cnt가 1씩 증가한다.

For

# for(int i = 0; i < 10; i++)
for i in range(10):
    i # 0부터 9까지 순서대로 증가한다.

# for(int i = 5; i < 10; i++)
for i in range(5, 10):
    i # 5부터 9까지 순서대로 증가한다.

# for(int i = 1; i < 10; i += 2)
for i in range(1, 10, 2):
    i # 1부터 9까지 2씩 증가한다.

for i in range(10):
    if i % 3 == 0:
        continue
    i # 1,2,4,5,7,8 이 순서대로 실행된다.

list에 for문을 통해 원소를 넣는다.

ary_list = [1, 3, 5, 7, 9]
for i in ary_list:
    i # ary_list의 원소들이 하나씩 할당된다.

for_in_ary = [x for x in range(10)]
for_in_ary # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for_in_ary = [2*x for x in range(10)]
for_in_ary # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

for_in_ary = [2*x if x%2 == 1 else x for x in range(10)]
for_in_ary # [0, 2, 2, 6, 4, 10, 6, 14, 8, 18]

for_in_ary = [x for x in ['Hello', 'World', 'Soovin', 'Jeemyeong']]
for_in_ary # ['Hello', 'World', 'Soovin', 'Jeemyeong']

Float

float_num = float(3)
float_num # 3.0

float_num = 3/1
float_num # 3.0

float_num = int(3.0)
float_num # 3

str(3) + "3" # "33"
int("3") + 3 # 6
# 3 + "3" # TypeError: unsupported operand type(s) for +: 'int' and 'str'

# input_str = input()
# type(input_str) # <class 'str'>

# input_int = int(input())
# type(input_int) # <class 'int'>

# input_str_ary = [input() for x in range(3)]

# input_int_ary = [int(input()) for x in range(3)]

Def

파이썬에서 함수를 정의할 때는 def 문을 사용한다.
입력을 할때 input()대신 sys.stdin.readline()을 이용하면 더 효율적으로 시간을 줄일 수 있다.

# def LI(): return [int(x) for x in sys.stdin.readline().split()]
import sys
def LI():
    # return [int(x) for x in input().split()]
    return [int(x) for x in sys.stdin.readline().split()]

# input_int_ary = LI()
# print(input_int_ary) # "1 2 3" => [1, 2, 3]

문자와 숫자를 곱하게 되면, 그 숫자만큼 문자가 반복된다.

a = 3 * 4
a # 12
b = "3" * 4
b # "3333"

def mult(x, y):
    return x * y

mult(3, 4) # 12
mult(3, "4") # "444"
# mult("3", "4") # TypeError: can't multiply sequence by non-int of type 'str'

Min, Max

내장함수인 min, max를 이용하여 최소값, 최대값을 구할 수 있다.
또한 lambda를 이용하여 길이 중에서 최소값을 찾을 수 있다.

min([1,2,3,4,5]) # 1
max([1,2,3,4,5]) # 5
min(["ab", "a", "abc"], key=lambda x:len(x)) # "a"

Math

math를 import하여 제곱을 구할 때는 pow(), 제곱근을 구할 때는 sqrt()를 사용한다.
float형에서 int형으로 바꾸면서 소수점 밑을 버릴 수 있다.

import math

3**2 # 9
math.pow(3, 2) # 9.0
math.sqrt(9) # 3.0

3 == 3.0 # True
int(3.9) # 3

pass, continue 차이점

pass는 그냥 아무것도 하지 않는다의 의미로 쓴다. 즉 수행할 코드가 없음을 명시적으로 표현할 뿐이다. continue는 강제로 다음 루프를 돌리게 한다.

for i in [1,2,3]:
    print i
    if i:
        pass
        print "pass"
# 1
# pass
# 2
# pass
# 3
# pass

for i in [1,2,3]:
    print i
    if i:
        continue
        print "continue"
# 1
# 2
# 3