#!/usr/bin/env python # coding: utf-8 # *** # *** # # 9. 리스트의 기초 # *** # *** # *** # ## 1 리스트 생성 및 기본 연산 # *** # - 리스트: 시퀀스 자료형이면서 변경 가능(Mutable) # - 리스트에서 지원하는 일반적인 연산 # - 인덱싱, 슬라이싱, 연결, 반복, 멤버쉽 테스트 # In[1]: l = [] l = [1, 2, "Great"] print l[0], l[-1] print l[1:3], l[:] print L = range(10) print L[::2] print print l * 2 print l + [3, 4, 5] print len(l) print print 4 in L # - Mutable 특성을 지닌 리스트의 값 변경 # In[11]: a = ['spam', 'eggs', 100, 1234] a[2] = a[2] + 23 print a # - 리스트 원소에 대한 슬라이스 치환 # In[5]: a = ['spam', 'eggs', 123, 1234] a[0:2] = [1,12] # 동일한 크기에 대한 슬라이스 치환 print a a[0:2] = [1] # 서로 다른 크기에 대한 슬라이스 치환 print a a[0:1] = [1, 2, 3] # 서로 다른 크기에 대한 슬라이스 치환 print a # - 리스트 원소에 대한 슬라이스 삭제 # In[1]: a = [1, 12, 123, 1234] a[0:2] = [] print a # - 리스트 원소 사이에 슬라이스 삽입 # In[1]: a = [123, 1234] a[1:1] = ['spam', 'ham'] # 1번째 인덱스에 삽입 print a b = [123, 1234] b[1:2] = ['spam', 'ham'] # 1번째 원소에 대한 치환 print b a[:0] = a # 리스트 맨 앞에 자기 자신을 삽입 print a # - del을 이용한 리스트 요소 삭제 # In[17]: a = [1, 2, 3, 4] del a[0] print a del a[1:] print a # In[9]: a = range(4) print a print a[::2] del a[::2] print a # - 리스트 자체에 대한 삭제 # - 정확히는 리스트를 가리키는 레퍼런스를 지닌 변수 a 삭제 # In[3]: a = range(5) del a print a # - 중첩 리스트: 리스트 안에 요소로서 리스트를 지닌 리스트 # In[6]: s = [1, 2, 3] t = ['begin', s, 'end'] print t print t[1][1] # In[7]: s[1] = 100 print t # In[22]: L = [1, ['a', ['x', 'y'], 'b'], 3] print L[0] print L[1] print L[1][1] print L[1][1][1] # - range: 순차적인 정수 리스트 만들기 # In[4]: print range(10) # 0(Included)부터 10(Excluded)까지 print range(5, 15) # 5(Included)부터 15(Excluded)까지 print range(5, 15, 2) # 0(Included)부터 10(Excluded)까지, Step: 2 # In[80]: for el in range(10): print el, 'inch=', el * 2.54, 'centi' # In[2]: sun, mon, tue, wed, thu, fri, sat = range(7) print sun, mon, tue, wed, thu, fri, sat # - 리스트 안의 각 자료가 튜플일 때 for 문을 사용하여 값 추출 방법 # In[4]: lt = [('one', 1), ('two', 2), ('three', 3)] for t in lt: print 'name =', t[0] ,', num =', t[1] # - 아래 코드가 더 효율적 # In[8]: lt = [('one', 1), ('two', 2), ('three', 3)] for t in lt: print 'name = %s, num = %s' % t # - for 문의 헤더에서 각 튜플의 값 추출 # In[12]: lt = [('one', 1), ('two', 2), ('three', 3)] for name, num in lt: print name, num # - 리스트 안의 각 자료가 리스트여도 for 문의 헤더에서 동일하게 값 추출 가능 # In[38]: LL = [['one', 1], ['two', 2], ['three', 3]] for name, num in LL: print name, num # *** # ## 2 리스트 메소드 # *** # ### 2-1 리스트가 지원하는 메소드 # In[19]: s = [1, 2, 3] s.append(5) # 리스트 맨 마지막에 정수 값 5 추가 print s s.insert(3, 4) # 3 인덱스 위치에 정수 값 4 추가 print s # In[24]: s = [1, 2, 3, 4, 5] print s.index(3) # 값 3의 인덱스 반환 print s.count(2) # 값 2의 개수 반환 s = [1, 2, 2, 2, 2, 2, 3, 4, 5] print s.count(2) # - python의 소팅 알고리즘: Timsort (변형된 merge sort) # - 참고: http://orchistro.tistory.com/175 # In[5]: s = [1, 2, -10, -7, 100] s.reverse() # 자료의 순서를 뒤집기 (반환값 없음) print s s.sort() # 정렬 (반환값 없음) print s # In[36]: s = [10, 20, 30, 40, 50] s.remove(10) # 자료 값 10 삭제 print s s = [10, 20, 30, 20, 40, 50] # 자료 값이 여러개 존재하면 첫번째 것만 삭제 s.remove(20) print s s.extend([60, 70]) # 새로운 리스트([60, 70]를 기존 리스트 s 뒤에 병합 print s s.append([60, 70]) # 주의: append로 새로운 리스트를 추가하면 하나의 자료 요소로서 추가 print s # ### 2-2 리스트를 스택(Stack)으로 사용하기 # In[37]: s = [10, 20, 30, 40, 50] s.append(60) print s print s.pop() print s # ![image](images/stack.png) # In[2]: s = [10, 20, 30, 40, 50] print s.pop(0) #0 번째 인덱스 값을 꺼낸다. print s print s.pop(1) #1 번째 인덱스 값을 꺼낸다. print s # ### 2-3 리스트를 큐(Queue)로 사용하기 # In[3]: q = [10, 20, 30, 40, 50] q.append(60) print q.pop(0) print q # ![image](images/queue.png) #

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일