#!/usr/bin/env python # coding: utf-8 # *** # *** # # 9. 리스트의 기초 # *** # *** # *** # ## 1 리스트 생성 및 기본 연산 # *** # - 리스트: 시퀀스 자료형이면서 변경 가능(Mutable) # - 리스트에서 지원하는 일반적인 연산 # - 인덱싱, 슬라이싱, 연결, 반복, 멤버쉽 테스트 # In[2]: l = [] l = [1, 2, "Great"] print(l[0], l[-1]) print(l[1:3], l[:]) print() L = range(10) print(L[::2]) print(list(L)[::2]) print() print(l * 2) print(l + [3, 4, 5]) print(len(l)) print() print(4 in L) # - Mutable 특성을 지닌 리스트의 값 변경 # In[3]: 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[6]: a = [1, 12, 123, 1234] a[0:2] = [] print(a) # - 리스트 원소 사이에 슬라이스 삽입 # In[7]: 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[8]: a = [1, 2, 3, 4] del a[0] print(a) del a[1:] print(a) # In[9]: # a = range(4) a = list(range(4)) print(a) print(a[::2]) del a[::2] print(a) # - 리스트 자체에 대한 삭제 # - 정확히는 리스트를 가리키는 레퍼런스를 지닌 변수 a 삭제 # In[10]: a = range(5) del a print(a) # - 중첩 리스트: 리스트 안에 요소로서 리스트를 지닌 리스트 # In[11]: s = [1, 2, 3] t = ['begin', s, 'end'] print(t) print(t[1][1]) # In[12]: s[1] = 100 print(t) # In[13]: L = [1, ['a', ['x', 'y'], 'b'], 3] print(L[0]) print(L[1]) print(L[1][1]) print(L[1][1][1]) # - range: 순차적인 정수 리스트 생성 가능한 시퀀스형 range 객체 만들기 # In[15]: 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[16]: print(list(range(10))) # 0(Included)부터 10(Excluded)까지 print(list(range(5, 15))) # 5(Included)부터 15(Excluded)까지 print(list(range(5, 15, 2))) # 0(Included)부터 10(Excluded)까지, Step: 2 # In[4]: for el in range(10): print(el, 'inch =', el * 2.54, 'centi') # - 아래 코드가 더 좋음 # In[25]: for el in range(10): print("%d inch = %.2f centi" % (el, el * 2.54)) # In[27]: for el in range(10): print("{0} inch = {1:.2f} centi".format(el, el * 2.54)) # In[5]: sun, mon, tue, wed, thu, fri, sat = range(7) print(sun, mon, tue, wed, thu, fri, sat) # - 리스트 안의 각 자료가 튜플일 때 for 문을 사용하여 값 추출 방법 # In[29]: lt = [('one', 1), ('two', 2), ('three', 3)] for t in lt: print('name =', t[0] ,', num =', t[1]) # - 아래 코드가 더 좋음 # In[30]: lt = [('one', 1), ('two', 2), ('three', 3)] for t in lt: print('name = %s, num = %s' % t) # In[33]: lt = [('one', 1), ('two', 2), ('three', 3)] for t in lt: print('name = {0}, num = {1}'.format(t[0], t[1])) # - for 문의 헤더에서 각 튜플의 값 추출 # In[20]: lt = [('one', 1), ('two', 2), ('three', 3)] for name, num in lt: print(name, num) # - 리스트 안의 각 자료가 리스트여도 for 문의 헤더에서 동일하게 값 추출 가능 # In[21]: LL = [['one', 1], ['two', 2], ['three', 3]] for name, num in LL: print(name, num) # *** # ## 2 리스트 메소드 # *** # ### 2-1 리스트가 지원하는 메소드 # In[22]: s = [1, 2, 3] s.append(5) # 리스트 맨 마지막에 정수 값 5 추가 print(s) s.insert(3, 4) # 3 인덱스 위치에 정수 값 4 추가 print(s) # In[23]: 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[34]: s = [1, 2, -10, -7, 100] k = s.reverse() # 자료의 순서를 뒤집기 (반환값 없음 --> 리스트 자체의 내부 원소 배열이 변경됨) print(k) print(s) k = s.sort() # 정렬 (반환값 없음 --> 리스트 자체의 내부 원소 배열이 변경됨) print(k) print(s) # In[6]: 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)으로 사용하기 # - LIFO (Last Input First Output) # In[36]: s = [10, 20, 30, 40, 50] s.append(60) print(s) # If no index is specified, a.pop() removes and returns the last item in the list. print(s.pop()) print(s) # ![image](../images/stack.png) # In[37]: s = [10, 20, 30, 40, 50] print(s.pop(0)) #0 번째 인덱스 값을 꺼낸다. print(s) print(s.pop(1)) #1 번째 인덱스 값을 꺼낸다. print(s) # ### 2-3 리스트를 큐(Queue)로 사용하기 # - FIFO (First Input First Output) # In[38]: 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일