리스트 활용
지난번에 공부한 리스트에대해 좀 더 자세히 알아보겠습니다. for in 문을 이용해서 리스트를 생성하는 코드는 다음과 같습니다.
----------------------------------------------------------------------------------------
L=[]
for k in range(10):
L.append(k)
print L
----------------------------------------------------------------------------------------
- 리스트 내포
리스트 내포를 이용하면 위 3줄의 코드를 한줄로 만들 수 있습니다. 리스트 내포의 리터럴(문법)은 다음과 같습니다.
----------------------------------------------------------------------------------------
[expression(식) for expr1 in sequence1:
for expr2 in sequence2:
…
for exprN in sequenceN:
if condition] # 조건
# expression에는 반드시 한개의 원소가 들어가야 됩니다. x,y를 쓰고싶은경우 튜플의 형태 (x,y)로 사용해야 합니다.
----------------------------------------------------------------------------------------
위에서 만든 리스트를 리스트 내포를 이용해서 만드는 코드는 다음과 같습니다.
----------------------------------------------------------------------------------------
L2=[k for k in range(10)]
print L2
----------------------------------------------------------------------------------------
그렇다면, 조건은 어떻게 활용 할까요? 아래 코드는 k%2를 조건으로 줘서 2의 배수이면 거짓이되서 2의배수가 아닌 수의 제곱만 출력하는 코드입니다.
----------------------------------------------------------------------------------------
L3=[k*k for k in range(10) if k%2]
print L3
----------------------------------------------------------------------------------------
(실행 결과)
[1, 9, 25, 49, 81]
----------------------------------------------------------------------------------------
sort() 메소드는 리턴값 없이 리스트를 정렬해서 변경하는 메소드였습니다. sort()메소드와 함께 활용하면 좋은 메소드에대해 알아보겠습니다.
- cmp(a,b) : 동일한 형의 인자 a,b를 비교해서 값을 리턴
a<b인 경우 -1, a>b인 경우 1, a=b인 경우 0 리턴
- sorted() 내장 함수 : 정렬해서 새로운 리스트를 반환, 원래 리스트는 변경하지 않음
- reverse() : 앞뒤를 바꿔서 원래 리스트를 변경
두번 호출하면 값이 변경되었더라도 원래 리스트로 변경
- reversed() 내장 함수 : reverse()메소드와 같은 기능이지만 새로운 리스트를 반환
cmp()메소드를 활용해서 역순으로 정렬하는 코드입니다.
----------------------------------------------------------------------------------------
def mycmp(a1,a2):
return cmp(a2,a1)
L=[2,5,1,3,8,7]
L.sort(mycmp)
print L
----------------------------------------------------------------------------------------
(실행 결과)
[8, 7, 5, 3, 2, 1]
----------------------------------------------------------------------------------------
sort()메소드의 인자에는 key와 reverse가 있습니다. key를 이용하면 원하는 자료형으로 정렬이 가능하고, reverse를 이용하면 역순으로 정렬할 수 있습니다.
----------------------------------------------------------------------------------------
L=['123','45','6','780']
L.sort() # 기본 정렬 - 맨 앞문자의 사전순으로 정렬
print L
L.sort(key=int) # int형으로 정렬
print L
L.sort(reverse=True) # 역순으로 정렬
print L
----------------------------------------------------------------------------------------
(실행 결과)
['123', '45', '6', '780']
['6', '45', '123', '780']
['780', '6', '45', '123']
----------------------------------------------------------------------------------------
마지막으로, sorted() 내장 함수를 사용해 보겠습니다.
----------------------------------------------------------------------------------------
L=[1,5,8,3,4,7]
newL=sorted(L) # 새로운 리스트를 newL에 저장
print 'newL : ',newL
print 'L : ',L
----------------------------------------------------------------------------------------
(실행 결과)
newL : [1, 3, 4, 5, 7, 8]
L : [1, 5, 8, 3, 4, 7] # L의 리스트는 변화없음
----------------------------------------------------------------------------------------
* 출처 : 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍