Python_Basic_04
다차원 리스트와 Built-in function, range, list comprehension, 튜플(tuple), 딕셔너리(dictionary), 셋(set)
다차원 리스트와 Built-in function, range, list comprehension, 튜플(tuple), 딕셔너리(dictionary), 셋(set)
- sort
- sorted는 원본을 만지지 않는 ‘built-in function’, 정렬입니다.
- sort는 원본을 만지는 ‘리스트 메서드’, 정렬입니다.
- sort의 다양한 예
l = [[1, 10, 'honggildong'], [20, 30, 'gildong'], [10, 20, 'weniv!'], [1, 2, 'hello world'], [55, 11, 'sun']] # 1. 글자 수 대로 정렬해주세요. def f(x): return len(x[2]) print(sorted(l, key=f, reverse=False)) print(sorted(l, key=lambda x:len(x[2]), reverse=False)) # 2. 맨 앞에 위치한 숫자대로 정렬해주세요. def f2(x): return x[0] print(sorted(l)) print(sorted(l, key=f2)) print(sorted(l, key=lambda x:x[0])) # 3. 중앙에 위치한 값대로 정렬해주세요. def f3(x): return x[1] print(sorted(l)) print(sorted(l, key=f3)) print(sorted(l, key=lambda x:x[1])) l = [[1, 10, 32], [20, 30, 11], [10, 20, 22], [1, 2, 13], [55, 11, 44]] # 4. 3개의 전체 합이 작은 순서대로 출력해주세요. def f4(x): return x[0] + x[1] + x[2] def f5(x): return sum(x) print(sorted(l, key=f4)) print(sorted(l, key=f5)) print(sorted(l, key=lambda x: sum(x))) print(sorted(l, key=sum))
- 깊은 복사와 얕은 복사
- 깊은 복사 : 완전히 다른 객체를 만듭니다.(깊은 복사는 n 계층까지 모두 복사)
# 깊은 복사 import copy l = [[1, 2, 3], [4, 5, 6]] ll = copy.deepcopy(l) ll[0][0] = 10 l, ll
- 얕은 복사 : 내용물은 같은 다른 객체를 만듭니다.(얕은 복사는 1 계층만 복사)
# 얕은 복사 l = [[1, 2, 3], [4, 5, 6]] ll = l[:] # l.copy, sorted를 써도 마찬가지입니다. l[0][0] = 100 l, ll
- 깊은 복사 : 완전히 다른 객체를 만듭니다.(깊은 복사는 n 계층까지 모두 복사)
- range
# range(start, stop, step) # 슬라이싱은 ':'(콜론)으로 연결되어 있고 # range는 ','(콤마)로 연결되어 있습니다. print(list(range(100))) # programminglanguage 2.x에서 programminglanguage 3.x에 range를 사용하고 싶다면 xrange(10) print(list(range(5, 10))) print(list(range(0, 101, 2))) #짝수 print(list(range(1, 101, 2))) #홀수 print(list(range(100, 1, -2))) print(sum(list(range(0, 101)))) print(sum(range(0, 101))) # 이렇게 형 변환을 하지 않고 sum하시는 것을 권합니다.
- list comprehension
# l = [] # for i in range(1, 11): # l.append(i**i) # l l = [i**i for i in range(1, 11)] l
- tuple
- 튜플은 순서가 있는 시퀀스형 자료형입니다.
- 참조값은 변경이 불가능(immutable) 합니다.
t = (10, 20, 30) t[1] = 1000 # error
- 다른 자료형을 입력할 수 있으며, 튜플 안에 튜플로 다차원의 튜플을 만드는 것도 가능합니다.
- 값의 중복을 허락합니다.
- 메서드는 index와 count밖에 없습니다.
- dict (딕셔너리, 사전형)
- 딕셔너리는 순서가 없는 자료형입니다.
- 사전형은 Key와 Value 가 하나의 묶음으로 이루어진 자료 체계입니다.
- 값의 변경이 가능합니다.
d = {'one' : '하나', 'two' : '둘', 'three' : '셋'} print(d['one']) # 호출 d['two'] = '투' # 변경 d
- 다른 자료형을 입력할 수 있습니다.
- 키의 중복은 허락하지 않고, 값의 중복을 허락합니다.
- dict를 활용한 switch 만들기
def switch(day): return { 1 : '월요일', 2 : '화요일', 3 : '수요일', 4 : '목요일', 5 : '금요일', 6 : '토요일', 7 : '일요일', }.get(day, '요일을 찾지 못했습니다.') switch(8)
- max를 이용한 dict 최대 value의 key값 가져오기
d = { 'test1': 10, 'test2': 20, 'test3': 31, 'test4': 11, } # max(d.values()) # 이걸로는 뭔가 찾아내기 힘듭니다. max(d, key=lambda x: d[x]) max(d, key=d.get) #많이 사용하는 코드입니다.
- 언패킹
- 언패킹 예
for i, j, k in [[10, 20, [1, 2]], [30, 40, [3, 4]], [50, 60, [5, 6]]]: print(i, j, k)
- swap 예
# swap a = 10 b = 15 a, b = b, a a, b
- 언패킹 예
- set (셋, 집합)
- 집합 자료형은 중복을 허용하지 않으며
- 순서가 없는 자료형
n = set([1, 1, 2, 2, 3, 3, 4]) print(n)
- 메서드
- add : 값 추가
- update : 값 여러개 추가
- remove : 제거
- copy : 값 복사
- union : 합집합
- intersection : 교집합
- difference : 차집합
- issubset : 부분집합