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)
- split은 특정 문자를 구분하여 자르고 List로 저장
변수명 = '문자열'.split('구분문자')
langs = "java,javascript,css,html,sql,python"
langList = langs.split(",")
print(langList)
- 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)
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','자바','오라클','자바스크립트')
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)
함수
- 중복 코드를 미리 작성한 후 필요한 곳에서 호출하여 사용(코드의 재사용성)
- 함수의 선언은 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)
- Variable Arguments(가변인자형)
- 매개변수는 하나인데 값을 여러개 넣을 수 있는 것
def 함수명(*매개변수명):
# 들어오는 매개변수명은 tuple로 처리됨
...
함수명()
함수명(값, ... ) # 둘 다 가능
# Variable Arguments
def test5(*names):
print(type(names))
print(names)
for name in names:
print(name)
test5('young','sol','minsoo')
- 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='서울시 동작구')