• Home
  • About
    • Young's Github Pages photo

      一日不作一日不食

    • About
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Python 정리 04

09 May 2019

Reading time ~4 minutes

Python 정리 04 - list, tuple, dict, 함수


List

  • 가변길이 데이터형
# 초기값이 없는 List
변수명 = list()

# 초기값이 존재하는 List
변수명 = [값, ... ]
  • 값 추가
    • 값이 뒤로 붙는다
변수명.append(값)
  • 값 삽입
    • 인덱스에 해당하는 번째 방에 값을 넣을 수 있다
변수명.insert(인덱스, 값)
  • 크기(방의 수)
len(변수명)
  • 삭제
# 방의 내용 삭제
변수명.remove(값)

# 인덱스 삭제
del 변수명[인덱스]

# 모든 방 삭제
변수명.clear()
  • 방안에 존재하는 동일 값의 개수
    • java에서 list안에 존재하는 값의 개수를 구하기 위해선 for문 안에 if로 비교하고 cnt변수를 증가시켜야 함
변수명.count(값)
lang = list("is javascript the same as java?")
print(lang.count('j')) # 2
  • 방의 값이 존재하는지
값 in 변수명 # True 또는 False 반환
if 'j' in lang:
print('it has \'j\' ') 
  • 문자열을 List로 생성
    • 자바에서 문자열을 list에 담기위해선 문자열을 substring으로 잘라서 일일이 넣어줘야 함
변수명 = list('문자열') # ['문','자','열'] 로 저장됨
lang = list("is javascript the same as java?")
print(lang)

01

  • split은 특정 문자를 구분하여 자르고 List로 저장
변수명 = '문자열'.split('구분문자')
langs = "java,javascript,css,html,sql,python"
langList = langs.split(",")
print(langList)

02

  • List는 Slicing을 제공한다
    • n개의 List를 결합시킬 수 있다
변수명[시작인덱스 : 끝인덱스]
# 여러개의 리스트 합치기
li4 = ['노진경','김희철','박영민']
li5 = ['김정윤','최지우','이지수']
memberList = li4+li5

print(memberList)

# slicing : memberList에서 '박영민~최지우'까지만 얻기
print(memberList[2:5])

# '이지수'만 얻기
print(memberList[-1:])

# 짝수번째 요소만 얻기
print(memberList[::2])
print('이재찬' in memberList)

03

Tuple

  • 빈 튜플을 생성할 수 있지만 값을 추가할 순 없다
tu1 = ()
tu2 = ('1','2','3')
  • 튜플은 값을 조작할 수 없다
    • 추가X, 삭제 X
# tu1.append('ho') # error!
  • 튜플에 대해 붙임연산을 수행할 수 있다
tu2 = ('1','2','3')
tu3 = ('자바','오라클','자바스크립트')

tu4 = tu2 + tu3
print(tu4) # ('1','2','3','자바','오라클','자바스크립트')

04

Dict

  • 키와 값의 쌍으로 이루어진 데이터형
  • 키는 중복이 안됨
# 빈 dict
변수명 = {}

# 값이 있는 dict
변수명 = {"키":"값", "키":"값", ... }
  • 값 추가
    • 키는 유일, 만약 이미 존재한다면 덮어 쓴다
    • 있으면 추가되고 없으면 바뀌는 것 == upsert(insert+update)
변수명["키"] = "값"
  • 값 삭제
del 변수명[키]
  • 값 얻기
    • 키가 없다면 None이 반환된다
    • 키가 없을 때 반환할 값(default)을 지정할 수 있다
변수명.get(키) # 값을 반환한다

변수명.get(키, '키가 없을 때 반환할 디폴트값')
  • 모든 키 얻기
변수명.keys()
  • 모든 값 얻기
변수명.values()
  • 모든 키와 값 얻기
    • 키와 값이 tuple로 얻어짐(변경할 수 없다)
변수명.items()
  • 키의 존재여부 확인
'키' in 변수명 # True나 False 반환
dict1 = {}
dict2 = {'김정윤':'디자인을 잘하며 이상한 쿼리를  알려준다',
    '김희철':'질문할 때 팔의 각도가 예술이다',
    '노진경':'예비군 갔다 병얻어 왔다',
    '김정운':'아이언맨 계약만료로 사망, 이승탈출  넘버원' }

print(dict1) # {}
print(dict2) # {'김정윤': '디자인을 잘하며...', '김희철': '질문할 ... ', ... }

print(len(dict1)) # 0
print(len(dict2)) # 4

# 값 추가
dict2['이재찬'] = '햄버거가 좋아요'
dict2['이재찬'] = '피자도 좋아요' # 키가 같으면 이전 갚을 덮어씌운다

# 값 얻기, 변수명.get('키')
print(dict2.get('이재찬'))
print(dict2.get('오영근')) # 키가 없기 때문에 None이  반환됨
print(dict2.get('오영근','드디어 학원 일주일도  안남았다')) # default값이 출력됨

del dict2['김정운']
print(dict2) 

# 모든 키 얻기 keys()
print(dict2.keys())

# 모든 값 얻기
print(dict2.values())

# 모든 키와 값 얻기
print(dict2.items())
print('김정운' in dict2)

05

함수

  • 중복 코드를 미리 작성한 후 필요한 곳에서 호출하여 사용(코드의 재사용성)
  • 함수의 선언은 def로 시작
  • 함수의 영역은 들여쓰기(indentation)로 구분
  • 함수의 내용이 없다면 Error 발생
    • pass란 키워드를 넣으면 Error 안남
    • 자바는 내용이 없어도 Error 안남
  • 파이썬은 반환형, 접근지정자가 없고 매개변수만 존재
    • JavaScript의 함수와 닮았다
  • return을 생략하면 None이 반환됨
  • 함수가 종료되면 두 줄 정도 띄우고 다음 코드를 작성 (PEP8)
def 함수명(매개변수, ... ):
    자주 사용될 코드

    # 내용이 없을땐 pass 명시
    pass

    return 값;
  • 호출
함수명(값, ... )
  • 함수명과 변수명이 같다면 먼저 선언된 건 사용할 수 없다
    • 둘 다 객체로 이름이 같으면 덮어씌워짐
    • 함수명은 변수명과 같은 취급을 하기 때문에 함수명, 변수명을 다르게 만든다
# 변수의 이름과 함수의 이름이 같다면 먼저 선언된 것은 사용할 수 없다
def temp():
    print('temp!!!')
    
    
temp = 3
print(temp) # 3 출력

temp() # error!
def test():
    print('test')
        

# 호출    
test()

# 함수의 반환형이 없을 땐 None이 반환됨
name = test() 
print(name) # None

# 반환값이 존재하는 함수
def test1():
    name='이재찬'
    return name


name = test1()
print(name) # 이재찬

함수 - 매개변수 사용

  • 매개변수에 기본값(default)을 사용할 수 있다
    • 함수 호출 시 값이 없다면 기본값으로 사용
    • 때문에 오버로딩이 없음
      • 파이썬에선 동명의 함수를 만들 수 없다
def 함수명(매개변수명 = 값, ...):
    ...
# 매개변수의 기본값 사용
def test4(name='김희철',addr='강남구 역삼동',age=20):
    print("name : {}, addr : {}, age : {}".format(name,  addr, age))
    
# default값을 줄 수 있기 때문에 오버로딩이 안됨
test4()
test4('오영근')
test4('오영근','강남구 논현동')
test4('오영근','강남구 논현동',30)

06

  • Variable Arguments(가변인자형)
    • 매개변수는 하나인데 값을 여러개 넣을 수 있는 것
def 함수명(*매개변수명):
    # 들어오는 매개변수명은 tuple로 처리됨
    ...


함수명()
함수명(값, ... ) # 둘 다 가능
# Variable Arguments
def test5(*names):
    print(type(names))
    print(names)
    for name in names:
        print(name)
    

test5('young','sol','minsoo')

07

  • dict 형태로 입력받을 수 있다
    • == KVP로 매개변수 처리 가능
def 함수명(**매개변수명)
    # 들어오는 매개변수명은 dict로 처리됨
    ...


함수명(이름=값, 이름=값, 이름=값, ...)
# dict : 값을 입력할 때 '이름=값'의 형식을 가져야 한다
def test6(**info):
    print(type(info))
    print(info)
    for k,v in info.items():
        print(k,v)

    print(info.get('name')) # 이름 얻기


test6(name='김희철',age=20,addr='서울시 동작구')

08



Python