L = [1, 5, 3, 9, 8, 4, 2]
print(L.sort())
print(L)
None [1, 2, 3, 4, 5, 8, 9]
# compare
print(cmp(1,2))
print(cmp(5,2))
print(cmp('abc', 'abc'))
# -1
# 1
# 0
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-4-18a5030ce91e> in <module> 1 # compare ----> 2 print(cmp(1,2)) 3 4 print(cmp(5,2)) 5 NameError: name 'cmp' is not defined
# 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) # True - False. 1 - 0.
print(cmp(1, 2))
print(cmp(5, 2))
print(cmp('abc', 'abc'))
-1 1 0
def mycmp(a, b): # 대소관계에 따른 순서를 반대로 바꾸었음
return cmp(b, a)
L = [1, 5, 3, 2, 4, 6]
print(L)
L.sort(cmp=mycmp) # 역순으로 정렬
[1, 5, 3, 2, 4, 6]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-5f12d79ed6fb> in <module> 4 L = [1, 5, 3, 2, 4, 6] 5 print(L) ----> 6 L.sort(cmp=mycmp) # 역순으로 정렬 TypeError: 'cmp' is an invalid keyword argument for this function
#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)
sorted by name: [('jung', 10, 36), ('kim', 3, 28), ('lee', 5, 38)]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-1c604fbb67b8> in <module>() 10 print('sorted by name:', L) 11 ---> 12 L.sort(cmp=cmp_1) 13 print('sorted by experience:', L) 14 TypeError: 'cmp' is an invalid keyword argument for this function
#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)
sorted by name: [('jung', 10, 36), ('kim', 3, 28), ('lee', 5, 38)] sorted by experience: [('kim', 3, 28), ('lee', 5, 38), ('jung', 10, 36)]
#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)
sorted by the first character: ['jung', 'kim', 'loh'] sorted by the second character: ['kim', 'loh', 'jung']
L = ['123', '34', '56', '2345']
L.sort()
print(L)
L.sort(key=int)
print(L)
['123', '2345', '34', '56'] ['34', '56', '123', '2345']
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)
print(L[::-1])
print(L)
[9, 8, 6, 6, 3, 2, 1] [1, 2, 3, 6, 6, 8, 9] [9, 8, 6, 6, 3, 2, 1] [1, 2, 3, 6, 6, 8, 9]
L = [1, 6, 3, 8, 6, 2, 9]
newList = sorted(L)
print(newList)
print(L)
[1, 2, 3, 6, 6, 8, 9] [1, 6, 3, 8, 6, 2, 9]
for ele in sorted(L):
print(ele, end=" ")
1 2 3 6 6 8 9
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']
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-15-e6a9c6532b35> in <module>() 3 4 L = [1, 5, 3, 2, 4, 6] ----> 5 print(sorted(L, key=mycmp)) # 역순으로 정렬 6 print(L) 7 # ['123', '2345', '34', '56'] TypeError: mycmp() missing 1 required positional argument: 'a2'
#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)
[('jung', 10, 36), ('kim', 3, 28), ('lee', 5, 38)] [('lee', 5, 38), ('kim', 3, 28), ('jung', 10, 36)] [('kim', 3, 28), ('lee', 5, 38), ('jung', 10, 36)] [('lee', 5, 38), ('kim', 3, 28), ('jung', 10, 36)]
#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)
['jung', 'kim', 'loh'] ['loh', 'kim', 'jung'] ['kim', 'loh', 'jung'] ['loh', 'kim', 'jung'] loh kim jung
L = [1, 6, 3, 8, 6, 2, 9]
print(sorted(L, reverse=True))
[9, 8, 6, 6, 3, 2, 1]
L = ['123', '34', '56', '2345']
print(sorted(L))
print(sorted(L, key=int))
print(sorted(L, key=int, reverse=True))
['123', '2345', '34', '56'] ['34', '56', '123', '2345'] ['2345', '123', '56', '34']
L = [1, 6, 3, 8, 6, 2, 9]
print(L.reverse())
print(L)
None [9, 2, 6, 8, 3, 6, 1]
L = [1, 6, 3, 8, 6, 2, 9]
L.reverse() # 역순으로 뒤집는다.
for ele in L:
print(ele + 2, end=" ")
print()
L.reverse() # 다시 원상태로 복귀시킨다.
print(L)
11 4 8 10 5 8 3 [1, 6, 3, 8, 6, 2, 9]
L = [1, 6, 3, 8, 6, 2, 9]
print(L)
for ele in reversed(L):
print(ele + 2, end=" ")
print()
print(L)
[1, 6, 3, 8, 6, 2, 9] 11 4 8 10 5 8 3 [1, 6, 3, 8, 6, 2, 9]
다음은 고등학교 수학에서 배운 집합의 표기 방법이다.
파이썬의 리스트 내포(list comprehension)는 바로 위 집합 표기법과 유사한 방식의 리터럴이다.
위 집합들을 리스트 내포 방식으로 표현하면 다음과 같다.
L = []
for k in range(10):
L.append(k*k)
print(L)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
L = [k * k for k in range(10)]
print(L)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[expression for expr1 in sequence1 for expr2 in sequence2 ... for exprN in sequenceN if condition]
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)
[1, 9, 25, 49, 81]
L = []
for k in range(10):
if k % 2:
L.append(k*k)
print(L)
[1, 9, 25, 49, 81]
seq1 = 'abc'
seq2 = (1, 2, 3)
print([(x, y) for x in seq1 for y in seq2])
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]
seq1 = 'abc'
seq2 = (1, 2, 3)
l = []
for x in seq1:
for y in seq2:
l.append((x, y))
print(l)
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]
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)
[(2, 12, 24), (4, 3, 12), (6, 15, 90), (8, 6, 48), (10, 18, 180), (12, 9, 108), (16, 12, 192), (18, 3, 54)]
words = 'The quick brown fox jumps over the lazy dog'.split()
print(words)
stuff = [[w.upper(), w.lower(), len(w)] for w in words]
for i in stuff:
print(i)
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog'] ['THE', 'the', 3] ['QUICK', 'quick', 5] ['BROWN', 'brown', 5] ['FOX', 'fox', 3] ['JUMPS', 'jumps', 5] ['OVER', 'over', 4] ['THE', 'the', 3] ['LAZY', 'lazy', 4] ['DOG', 'dog', 3]
import numpy as np
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)
k = np.array(k)
print(k)
print(k.shape)
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (10, 24, 26), (12, 16, 20), (15, 20, 25), (20, 21, 29)] [[ 3 4 5] [ 5 12 13] [ 6 8 10] [ 7 24 25] [ 8 15 17] [ 9 12 15] [10 24 26] [12 16 20] [15 20 25] [20 21 29]] (10, 3)
from pprint import pprint
import numpy as np
x = [[[c*h*w for w in range(1, 5+1)] for h in range(1, 4+1)] for c in range(1, 3+1)]
pprint(x, width=200)
print(x[1][1][1])
# x = [i+10 if i % 2 == 0 else i+20 for i in range(10)]
# print(x)
x = np.array(x)
print(x.shape)
[[[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]], [[2, 4, 6, 8, 10], [4, 8, 12, 16, 20], [6, 12, 18, 24, 30], [8, 16, 24, 32, 40]], [[3, 6, 9, 12, 15], [6, 12, 18, 24, 30], [9, 18, 27, 36, 45], [12, 24, 36, 48, 60]]] 8 (3, 4, 5)
참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일