본문으로 바로가기

파이썬 입문

category Data Science/Python 2016.05.03 22:40

List와 Dictionary 비교  

공통

ListDictionary
생성list = [ 1, 2 ,3 ]dict = { 'one':1, 'two':2 }
호출list[ 0 ]dict[ 'one' ]
삭제del( list[ 0 ] )del( dict[ 'one' ] )
개수 확인len( list )len( dict )
값 확인2 in list'two' in dict.keys( )
전부 삭제list.clear( )dict.clear( )

차이점

ListDictionary
순서삭제 시 순서가 바뀌기 때문에 인덱스에 대한 값이 바뀐다key로 값을 가져오기 때문에 삭제 여부와 상관없다
결합list1 + list2dict1.update( dict2 )

  • 한번 정해진 순서를 바꿀 수 없다.
  • 튜플 선언

    tuple1 = (1, 2, 3, 4)
    
    tuple2 = 1, 2, 3, 4
    
    mylist = [1,2,3,4]
    tuple3 = tuple(mylist)
    
  • 튜플은 값의 변경과 삭제가 불가능

packing

  • 하나의 변수에 여러개의 값을 넣는 것

unpacking

  • 패킹된 변수에서 여러개의 값을 꺼내오는 것
c = (3, 4)
d, e = c    # c의 값을 언패킹하여 d, e에 값을 넣었다
f = d, e    # 변수 d와 e를 f에 패킹

튜플의 활용

  • 두 변수의 값을 바꿀 때 임시변수가 필요 없다.
  • 함수의 리턴 값으로 여러 값을 전달할 수 있다.
  • def tuple_func(): return 1,2 q,w = tuple_func() #q,w에 각각 1,2값이 저장됨

튜플 리스트 활용

for a in enumerate(list): print('{}번째 값: {}'.format(a[0], a[1])) #for a,b in enumerate(list) 변형 for a in enumerate(list): print('{}번째 값: {}'.format(*a)) #튜플을 쪼개라..

튜플 딕셔너리 활용

for a in dict.items():
    print('{}의 나이는:{}'.format(a[0], a[1]))

for a in dict.items():
    print('{}의 나이는:{}'.


while문

  • 조건이 참인 경우 계속 실행하는 반복문

    while selected not in ['가위', '바위', '']: selected = input('가위, 바위, 보 중에 선택하세요>') print('선택된 값은 : ',selected)

  • for 반복문으로 작성한 코드는 while 반복문으로 작성 할 수 있다.

break

  • 반복문을 종료시키는 기능

continue

  • 반복문의 나머지 부분을 보지 않고, 반복문의 처음으로 돌아가는 기능

예외 처리

try:
    # 에러가 발생할 가능성이 있는 코드
except Exception: # 에러 종류
    #에러가 발생 했을 경우 처리할 코드
  • 경우에 따라 예외 처리 대신 if else를 사용 할 수 있다.

예외 이름을 모르는 경우 처리 방법

try:
    # 에러가 발생할 가능성이 있는 코드
except Exception as ex: # 에러 종류
    print('에러가 발생 했습니', ex) # ex는 발생한 에러의 이름을 받아오는 변수

예외 발생

  • 사용자가 직접 에러를 발생시키는 기능
  • raise Exception # 에러 종류
  • 많이 사용하면 코드를 읽기 어려워진다.


bool 값과 논리연산


true, false

  • 숫자 0을 제외한 모든 수 - true
  • 빈 딕셔너리, 빈 리스트를 제외한 모든 딕셔너리, 리스트 - true
  • 아무 값도 없다는 의미인 None - false
  • 빈문자열을 제외한 모든 문자열 - true

  • value = input('입력해 주세요>') or '아무것도 못받았어' print('입력받은 값>'. value)

input('입력해 주세요>') 값이 빈값이라면 False이기 때문에 '아무것도 못받았어' 값이됨


a = 1 or 10 # 1의 bool 값은 True입니다.

b = 0 or 10 # 0의 bool 값은 False입니다.



print("a:{}, b:{}".format(a, b))

결과는 a=1, b=10



List의 기능

  • list.index( value ) : 값을 이용하여 위치를 찾는 기능
  • list.extend( [value1, value2] ) : 리스트 뒤에 값을 추가
  • list.insert( index, value ) : 원하는 위치에 값을 추가
  • list.sort( ) : 값을 순서대로 정렬
  • list.reverse( ) : 값을 역순으로 정렬

List와 String

  • 리스트와 문자열은 유사하다.
  • 서로 변환이 가능하다.
  • list = str.split( ) : 문자열에서 리스트로
  • " ".join( list ) : 리스트에서 문자열으로

slicing

  • 리스트나 문자열에서 값을 여러개 가져오는 기능
text = "hello world"
text = [ 1:5 ]

list = [ 0, 1, 2, 3, 4, 5 ]
list = [ 1:3 ]
  • slice를 하면 해당하는 부분의 리스트나 문자열을 새로 만들어 준다.

  • 시작과 끝부분을 얻어 오는 방법

    • list[ 2: ] : 2번째부터 끝까지 반환
    • list[ : 2 ] : 처음부터 2번째 까지 반환
    • list[ : ] : 처음부터 끝까지 전부 반환

step

  • slice한 값의 범위에서 step 값을 주어 그 값만큼 건너뛰어 가져오는 기능
  • list[ 시작값:끝값:step ]

slice 활용

  • 삭제
    • del list[ :5 ] : 처음부터 5번째까지 삭제
  • 수정
    • list[ 1:3 ] = [ 77, 88 ]
    • list[ 1:3 ] = [ 77, 88 ,99 ] : 더 많은 개수로 변환
    • list[ 1:4 ] = [ 8 ] : 더 적은 개수로 변환

메소드(Method)

  • 메소드는 함수와 비슷하다.
  • 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수

클래스 내부에 함수를 포함시킨 예

class Human( ):
    '''인간'''
    def create( name, weight ): # 다음 강의에서 자세히 설명
        person = Human()
        person.name = name
        person.weight = weight
        return person

    def eat( self ):
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))

    def walk( self ):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))

person = Human.create("철수", 60.5)
person.eat()

self

  • 메소드의 첫번째 인자
  • 인스턴스의 매개변수를 전달 할 때는 self 매개변수는 생략하고 전달

초기화 함수

  • __init__ : 인스턴스를 만들 때 실행되는 함수

문자열화 함수

  • __str__ : 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수
class Human( ):
    '''인간'''
    def __init__( self, name, weight ):
        '''초기화 함수'''
        self.name = name
        self.weight = weight

    def __str__( self )
        '''문자열화 함수
        return "{} ( 몸무게 {}kg )".format( self.name, self.weight )

person = Human( "사람", 60.5 ) # 초기화 함수 사용
print( person ) # 문자열화 함수 사용


상속(Inheritance)

  • 상속하는 클래스를 부모 클래스
  • 상속받는 클래스를 자식 클래스
  • 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것
class Animal( ):
    def walk( self ):
        print( "걷는다" )

    def eat( self ):
        print( "먹는다" )

class Human( Animal ):
    def wave( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def wag( self ):
        print( "꼬리를 흔든다" )


오버라이드(Override)

  • 같은 이름을 가진 메소드를 덮어 쓴다는 의미
class Animal( ):
    def greet( self ):
        print( "인사한다" )

class Human( Animal ):
    def greet( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def greet( self ):
        print( "꼬리를 흔든다" )


super()

  • 자식클래스에서 부모클래스의 내용을 사용하고 싶은 경우
  • super().부모클래스내용
class Animal( ):
    def __init__( self, name ):
        self.name = name

class Human( Animal ):
    def __init__( self, name, hand ):
        super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
        self.hand = hand

person = Human( "사람", "오른손


예외 정의

  • 사용자가 직접 예외처리를 하면 코드의 직관성을 높일 수 있다.
  • 파일을 하나 만들어 예외를 정의
  • Exception 클래스를 상속받아 만든다
try:
    sign_up( )
except BadUserName:
    print( "이름으로 사용할 수 없는 입력" )
except PasswordNotMatched:
    print( "력한 패스워드 불일치")


List Comprehension

  • 파이썬의 유용한 도구
    • 예1 [ i*i for i in range(1,11) ] # [ 계산식 for문 ]
    • 예2 [ i*i for i in range(1,11) if i % 2 == 0 ] # [ 계산식 for문 조건문 ]
    • 예3 [ ( x, y ) for x in range(15) for y in range(15) ] # [ 계산식 for문 for문 ]

Dictionary Comprehension

  • 파이썬의 유용한 도구
    • 예 { "{}번".format(number):name for number, name in enumerate(students) } # [ 형식 for문 ]

students = ['태연','진우','정현','하늘','성진']

for number, name in enumerate(students):

print("{}번의 이름은 {}입니다.".format(number,name))


{ "{}번".format(number):name for number, name in enumerate(students) } 


scores = [85,92,78,90,100]

for x,y in zip(students, scores):

print(x,y)


{ student : score for student, score in zip(students,scores) } 


datetime 모듈

  • 날짜와 시간을 사용하게 해주는 라이브러리
  • import datetime
  • datetime.datetime(2016, 12, 25)

timedelta 클래스

  • 시간의 연산을 가능하게 해주는 클래스
  • hundred_after가 지금으로부터 100일 후, 9시 정각을 값을 갖도록.

import datetime hundred_after = datetime.datetime.now().replace(hour=9,minute=0,second=0) 

+ datetime.timedelta(days=100) print("{}/{}/{}".format(hundred_after.year,hundred_after.month, hundred_after.day))



댓글을 달아 주세요