L = [1, 5, 3, 9, 8, 4, 2]
print(L.sort())
print(L)
print(cmp(1,2))
print(cmp(5,2))
print(cmp('abc', 'abc'))
# -1
# 1
# 0
# cmp(a, b)
# if a < b: return -1
# if a > b: return 1
# if a == b: return 0
def cmp(a, b):
return (a > b) - (a < b)
print(cmp(1, 2))
print(cmp(5, 2))
print(cmp('abc', 'abc'))
def mycmp(a, b): # 대소관계에 따른 순서를 반대로 바꾸었음
return cmp(b, a)
L = [1, 5, 3, 2, 4, 6]
print(L)
L.sort(cmp=mycmp) # 역순으로 정렬
#Python2 기준 예제
def cmp_1(a1, a2):
return cmp(a1[1], a2[1])
def cmp_2(a1, a2):
return cmp(a1[2], a2[2])
L = [('lee', 5, 38), ('kim', 3, 28), ('jung', 10, 36)]
L.sort()
print('sorted by name:', L)
L.sort(cmp=cmp_1)
print('sorted by experience:', L)
L.sort(cmp=cmp_2)
print('sorted by age:', L)
#Python3 기준 예제
L = [('lee', 5, 38), ('kim', 3, 28), ('jung', 10, 36)]
def get_key_value(a):
return a[1]
L.sort()
print('sorted by name:', L)
L.sort(key=get_key_value)
print('sorted by experience:', L)
#Python3 기준 예제
S = ['loh', 'kim', 'jung']
def get_key_value(a):
return a[1]
S.sort()
print('sorted by the first character:', S)
S.sort(key=get_key_value)
print('sorted by the second character:', S)
L = ['123', '34', '56', '2345']
L.sort()
print(L)
L.sort(key=int)
print(L)
L = [1, 6, 3, 8, 6, 2, 9]
L.sort(reverse=True) # L.sort(reverse = 1)
print(L)
L.sort(reverse=False) # L.sort(reverse = 1)
print(L)
L = [1, 6, 3, 8, 6, 2, 9]
newList = sorted(L)
print(newList)
print(L)
for ele in sorted(L):
print(ele, end=" ")
Python2: sorted() 함수의 두번째 인자로 cmp를 지정하는 함수 할당 가능
Python3: sorted() 함수의 두번째 인자로 key를 지정하는 함수 할당 가능
def mycmp(a1, a2): # 대소관계에 따른 순서를 반대로 바꾸었음
return cmp(a2, a1)
L = [1, 5, 3, 2, 4, 6]
print(sorted(L, key=mycmp)) # 역순으로 정렬
print(L)
# ['123', '2345', '34', '56']
# ['34', '56', '123', '2345']
#Python3 기준 예제
L = [ ('lee', 5, 38), ('kim', 3, 28), ('jung', 10, 36)]
def get_key_value(a):
return a[1]
print(sorted(L))
print(L)
print()
print(sorted(L, key=get_key_value))
print(L)
#Python3 기준 예제
S = ['loh', 'kim', 'jung']
def get_key_value(a):
return a[1]
print(sorted(S))
print(S)
print()
print(sorted(S, key=get_key_value))
print(S)
L = [1, 6, 3, 8, 6, 2, 9]
print(sorted(L, reverse=True))
L = ['123', '34', '56', '2345']
print(sorted(L))
print(sorted(L, key=int))
print(sorted(L, key=int, reverse=True))
L = [1, 6, 3, 8, 6, 2, 9]
print(L.reverse())
print(L)
L = [1, 6, 3, 8, 6, 2, 9]
L.reverse() # 역순으로 뒤집는다.
for ele in L:
print(ele + 2, end=" ")
print()
L.reverse() # 다시 원상태로 복귀시킨다.
print(L)
L = [1, 6, 3, 8, 6, 2, 9]
print(L)
for ele in reversed(L):
print(ele + 2, end=" ")
print()
print(L)
다음은 고등학교 수학에서 배운 집합의 표기 방법이다.
파이썬의 리스트 내포(list comprehension)는 바로 위 집합 표기법과 유사한 방식의 리터럴이다.
L = []
for k in range(10):
L.append(k*k)
print(L)
L = [k * k for k in range(10)]
print(L)
리스트 내포 리터럴
[expression for expr1 in sequence1 for expr2 in sequence2 ... for exprN in sequenceN if condition]
위 리터럴은 다음의 일반적인 for 문의 리털러과 동일
l = [] for expr1 in sequence1: for expr2 in sequence2: ... for exprtN in sequenceN: if condition: l.append(expression)
expression의 평가 결과 반드시 한 개의 원소가 나와야 한다.
만약 두 개의 이상의 평가 결과가 나오면 튜플 등으로 감싸 주어야 한다.
L = [k * k for k in range(10) if k % 2] # 홀수의 제곱만 리스트로 형성
print(L)
L = []
for k in range(10):
if k % 2:
L.append(k*k)
print(L)
seq1 = 'abc'
seq2 = (1, 2, 3)
print([(x, y) for x in seq1 for y in seq2])
seq1 = 'abc'
seq2 = (1, 2, 3)
l = []
for x in seq1:
for y in seq2:
l.append((x, y))
print(l)
L = [(i, j, i*j) for i in range(2, 20, 2) for j in range(3, 20, 3) if (i + j) % 7 == 0]
print(L)
words = 'The quick brown fox jumps over the lazy dog'.split()
stuff = [[w.upper(), w.lower(), len(w)] for w in words]
for i in stuff:
print(i)
k = [(x,y,z) for x in range(1,30) for y in range(x,30) for z in range(y,30) if x**2 + y**2 == z**2]
print(k)
참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일