회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


Python 5강 - 리스트

artsone | 2007.10.23 22:13 | 조회 7338
Python05-1.asf

Python 5강
리스트

1. 리스트의 일반 연산
2. 중첩 리스트(nested lists)
3. 리스트의 메쏘드들
4. 리스트의 리스트를 반복 참조하기
5. 정렬하기
6. 리스트 내장(list comprehension)
7. 순환 참조 리스트
8. range
9. 예제들



1. 리스트의 일반 연산
#기본 시퀀스 자료형 연산
인덱싱, 슬라이싱, 반복, 연결, 길이...

>>> L = [1, 2, 3, 'spam', 'ham']
>>> L[0] #인덱싱
1
>>> L[1:4] #슬라이싱
[2, 3, 'spam']
>>> L * 2 #반복
[1, 2, 3, 'spam', 'ham', 1, 2, 3, 'spam', 'ham']
>>> L + L #연결
[1, 2, 3, 'spam', 'ham', 1, 2, 3, 'spam', 'ham']
>>> len(L) #길이
5
>>> 3 in L #L안에 3이 있는지 찾기
True

#값 변경
#슬라이스 치환
L[1:3] = [1, 2, 3]

>>> L[1:3]
[2, 3]
>>> L[1:3] = [100, 200, 300] #치환
>>> L
[1, 100, 200, 300, 'spam', 'ham']


#슬라이스 삭제
L[1:3] = []
del L[1:3]

>>> L
[1, 100, 200, 300, 'spam', 'ham']
>>> L[1:3] = [] #1~3에 공백을 넣거나
>>> L
[1, 300, 'spam', 'ham']
>>> del L[1:3] #del로 1~3 리스트를 삭제
>>> L
[1, 'ham']

#슬라이스 삽입
L[1:1] = [1, 2, 3]

>>> L[1:1] = [2, 3, 'spam']
>>> L
[1, 2, 3, 'spam', 'ham']


2. 중첩 리스트(nested lists)
#리스트 안의 또 다른 리스트

python5-1.jpg

>>> s = [1, 2, 3]
>>> t = ['begin', s, 'end'] #리스트 안에 변수를 넣어 중첩 리스트를 만들수 있다.
>>> t
['begin', [1, 2, 3], 'end']
>>> t[1][1] #중첩리스트 위치 확인 t[1]의 [1](s[1])을 찾는 것
2


3. 리스트의 메쏘드들

python5-2.jpg

메쏘드 설명
append 자료를 리스트 끝에 추가 (혹은 스택의 push)
insert 자료를 지정된 위치에 삽입
index 요소 검색(Search)
count 요소 개수 알아내기
sort 리스트 정렬
reverse 자료 순서 바꾸기
remove 지정 자료 값 한개 삭제
pop 리스트의 마지막 값을 읽어내고 삭제(스택의 pop)
extend 리스트를 추가

>>> L
[1, 'egg', 2, 3, 'spam', 'ham', 5]
>>> L.append(1) #리스트 뒤에 1을 추가
>>> L
[1, 'egg', 2, 3, 'spam', 'ham', 5, 1]

>>> L.count(1) #리스트 안에 1이 몇개가 있는지 확인
2
>>> L.count('egg')
1
>>> L.count('python') #없으면 0
0

>>> L.sort() #리스트 정렬
>>> L
[1, 1, 2, 3, 5, 'egg', 'ham', 'spam']
>>> cmp #cmp 정렬하는 기준 함수(두개의 데이터를 인수로 받는 함수)

>>> cmp(1, 2) #뒷수가 크면 음수
-1
>>> cmp(1, 1) #같으면 0
0
>>> cmp(2, 1) #앞수가 크면 양수
1
>>> cmp(5, 'egg') #숫자가 문자 앞에 있으므로 음수
-1 #5가 egg보다 위치상 낮으니깐 -1
>>> cmp('egg', 5) #egg가 5보다 위치상 높으니깐 1
1

cmp(a, b) 정렬을 하는 기본 함수 : a - b와 같다.


>>> L.sort()
>>> M = L.sort() #리턴하기 위해 변수를 사용해도 되지 않고
>>> M
>>> L #sort한 L에게만 적용
[1, 1, 2, 3, 5, 'egg', 'ham', 'spam']

>>> L.reverse() #데이터들의 위치를 반전
>>> L
['spam', 'ham', 'egg', 5, 3, 2, 1, 1]

>>> L.remove('egg') #지정된 데이터를 삭제한다.
>>> L
['spam', 'ham', 5, 3, 2, 1, 1]
>>> L.remove(1) #똑같은 여러개의 데이터는 하나씩 삭제하게 된다.
>>> L
['spam', 'ham', 5, 3, 2, 1]


>>> L.pop() #뒤 데이터부터 하나씩 뺀다
1
>>> L
['spam', 'ham', 5, 3, 2]
>>> L.pop()
2
>>> L
['spam', 'ham', 5, 3]
>>> L.pop(0) #위치를 넣으면 해당 위치의 데이터만 뺀다.
'spam'

>>> L.append(10) #append는 뒤에서 하나씩 추가하지만
>>> L
['ham', 5, 3, 10]
>>> L.extend( [100, 200, 'spam', 'egg'] ) #extend는 한꺼번에 뒤에 리스트를 추가한다.
>>> L
['ham', 5, 3, 10, 100, 200, 'spam', 'egg']


Python05-1.asf 10:35
#리스트를 스택(stack)으로 쓰기
append(s), pop()

stack - LIFO (Last In First Out)
넣을 때는 append()
뺄 때는 pop()

>>> L = [5, 3, 10, 100, 200, 'spam', 'ham']
>>> L
[5, 3, 10, 100, 200, 'spam', 'ham']
>>> L.append(1) #뒤에다 1을 넣고,
>>> L
[5, 3, 10, 100, 200, 'spam', 'ham', 1]
>>> a = L.pop() #뺄 때는 정해진 변수에도 넣을 수 있다.
>>> a
1
>>> L
[5, 3, 10, 100, 200, 'spam', 'ham']

#리스트를 큐(queue)로 쓰기
append(s), pop(0)

queue - FIFO (First in First Out)

>>> L.append(1)
>>> L
[5, 3, 10, 100, 200, 'spam', 'ham', 1]
>>> L.pop(0) #0번째 꺼내기
5
>>> L.pop(1) #1번째 꺼내기
10
>>> L
[3, 100, 200, 'spam', 'ham', 1]



4. 리스트의 리스트를 반복 참조하기

>>> lt = [('one', 1), ('two', 2)] #리스트 안에 튜플
>>> for t in lt:
print 'name=', t[0], 'num=', t[1]


name= one num= 1
name= two num= 2

>>> for t in lt: #다른 방법으로 출력(참조)
print 'name=%s, num=%s' % t


name=one, num=1
name=two, num=2

>>> for name, num in lt: #다른 방법으로 출력(참조)
print name, num


one 1
two 2


5. 정렬하기
원하는 순서대로 정렬하기

#cmp(a, b) 내장 함수
a < b 일 때 -1
a == 일 때 0
a > b 일 때 1 리턴

cmp(a, b) 비교 함수


#사용자 정의 비교 함수를 이용한 정렬

>>> def mycmp(a1, a2): #def 함수 정의-하나의 함수를 만들수 있다.
return cmp(a2, a1) #cmp(a2, a1) 함수와 반대

>>> L = [1, 5, 3, 2, 4, 6]
>>> L.sort(mycmp)
>>> print L
[6, 5, 4, 3, 2, 1] #큰 값에서 작은 값으로 출력


>>> L = [('one', 1), ('two', 2), ('three', 3), ('four', 4)] #리스트 안에 튜플 사용시
>>> L.sort() #sort하게 되면
>>> L #영문 앞 알파벳에 의해 정렬이 된다.
[('four', 4), ('one', 1), ('three', 3), ('two', 2)]

영문이 아닌 숫자 기준으로 사용자 정렬을 하고 싶다면
>>> def mycmp(a1, a2): #함수를 만들고
return cmp(a1[1], a2[1]) #1번째 데이터 값을 리턴

>>> mycmp(('one', 1), ('four', 4)) #각 튜플의 1번째 데이터 비교
-1 #1과 4를 비교하므로 -1
>>> L
[('four', 4), ('one', 1), ('three', 3), ('two', 2)]
>>> L.sort(mycmp) #sort하면 1번째 데이터 값인 숫자로 정렬이 된다.
>>> L
[('one', 1), ('two', 2), ('three', 3), ('four', 4)]


Python05-1.asf 끝


Python05-2.asf
6. 리스트 내장(list comprehension)

#리스트 내장이란?
리스트를 쉽게 생성하기 위한 기능

>>> L = [k *k for k in range(10)] #리스트 안에 연산명령을 줄 수 있다.
>>> L #연산된 것이 리스트에 쌓이게 된다.
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


다른 방법
>>> L = []
>>> for k in range(10):
L.append(k*k)


>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


#일반 형식
[ expression for expr in sequence1
for expr2 in sequence2 ...
for exprN in sequence1
if condition ]

예:2의 배수와 3의 배수 중 두 합이 7의 배수가 되는 두수의 곱의 리스트
>>> [(i, j, i*j) for i in range(2, 100, 2) #(i, j, i*j)는 expression, for문 2의 배수 결과는 i
for j in range(3, 100, 3) #for문 3의 배수 j
if (i + j) % 7 == 0] #조건에 맞게 되면 expression 수행
[(2, 12, 24), (2, 33, 66), ...... (98, 63, 6174), (98, 84, 8232)]
>>> (98 + 84) % 7 #(2의배수 + 3의배수) % 7 (7의 배수)의 나머지가 0인
0

>>> [ (x, y) for x in range(10) for y in range(10, 20)]
[(0, 10), (0, 11), ...... (9, 18), (9, 19)]
>>> [ x, y for x in range(10) for y in range(10, 20)] #()괄호를 해야 오류가 없다.
SyntaxError: invalid syntax


05:35
7. 순환 참조 리스트
#어떤 객체가 자기 자신을 직, 간접으로 참조하는 경우

>>> GNU = ['is not Unix'] #
>>> GNU.insert(0, GNU) #0은 자기 자신
>>> GNU #[...]순환되는 리스트
[[...], 'is not Unix']

#순환 참조를 써야 할 경우는 15장 약한 참조를 이용한다.
약한 참조란 참조 카운트에 포함되지 않는 참조를 의미한다.


8. range

#range(10) #0~10 시작 0, 종료 9, 스텝 1 (10은 포함하지 않는다)
#range(1, 10) #1~10 시작 1, 종료 9, 스텝 2
#range(1, 10, 2) #1~10 시작 1, 종료 9, 스텝 2
#range(0, -10, -1) #0~-10 시작 0, 종료 -9, 스텝 -1

>>> range(0, -10, -1)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

#sun, mon, tue, wed, thu, fri, sat = range(7)
자동으로 0 ~ 6까지의 인덱스를 가진다.


9. 예제들
리스트를 활용한 몇 가지 예들

python5-3.jpg

#지역적으로 사용가능한 이름의 리스트 얻기 - dir()
dir() - 지역(local영역) 이름 리스트 얻기
dir(sys) - 모듈, 클래스등의 이름 리스트 얻기

>>> dir() #dir()함수의 리스트 확인
['__builtins__', '__doc__', '__name__']
>>> def f(a, b):
print dir()


>>> f(1, 2)
['a', 'b']
>>> dir()
['__builtins__', '__doc__', '__name__', 'f', 'sys']

>>> import sys
>>> dir(sys) #sys객체의 리스트를 확인할 수 있다.
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdout__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info', 'exc_traceback', 'exc_type', 'exc_value', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'hexversion', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions', 'winver']


Python05-2.asf 11:45
linux에서의 실행 처리

#명령행 인수 처리
sys.argv

#명령행 옵션 처리
getopt.getopt(인수리스트, 옵션문자열)
리턴 : 옵션 리스트, 나머지 인수 리스트

>>> import getopt
>>> s = '-a -b -c123 -d 456 spam and ham'
>>> args = s.split() #스페이스에 분리된 문자열을
>>> args #각 문자열이 옵션이 된다.
['-a', '-b', '-c123', '-d', '456', 'spam', 'and', 'ham']
>>> optlist, args = getopt.getopt(args, 'abc:d:')

getopt.getopt(args, 'abc:d:') args는 인수 리스트, 'abc:d:'는 옵션 리스트
a와 b는 다른 옵션값을 가지고 있지 않으므로 그냥 쓰고, c와 d는 123, 456 옵션값(추가 파라메터)이 있으므로 뒤에 :를 붙여주게 된다.

>>> optlist #출력해 보면 옵션 리스트의 a, b는 공백, c, d는 값을 가지는 것을 볼 수 있고,
[('-a', ''), ('-b', ''), ('-c', '123'), ('-d', '456')]
>>> args #나머지는 인수 리스트가 된다.
['spam', 'and', 'ham']

Python05-2.asf 끝


Python05-2.asf
#배열 표현하기
리스트로 1차원 배열 표현하기
A = [1, 2, 3, 4, 5]
A = range(10) #길이 데이터
A = [0] * 10 #반복 데이터
A = [None] * 10 #공백

리스트로 2차원 배열 표현하기
mat = [ [1, 2, 3],
[4, 5, 6],
[7, 8, 9] ] #중첩 리스트로 2차원 배열
mat[1][2] # 6

리스트로 배열 표현하는데 주의할 점
mat = [[0] * 4] * 3 #3에 참조만 될뿐이다.

python5-4.jpg

>>> mat = [[0] * 4] * 3
>>> mat
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> mat[0][0] = 100
>>> mat
[[100, 0, 0, 0], [100, 0, 0, 0], [100, 0, 0, 0]]

mat = [[0] * 4 for x in range(3)] #이제 정상적인 표현 방법

>>> mat = [[0] * 4 for x in range(3)]
>>> mat[0][0] = 100
>>> mat
[[100, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]


리스트를 사용하지 않교 배열 표현하는 방법

array 모듈 이용하기
같은 종류의 기본 자료형 1차원 배열
리스트와 같은 참조 구조(포인터)가 아니라, 연속 데이터 배열 구조임
>>> from array import*
>>> a = array('i', range(10)) #순차 데이터 생성하기
>>> a
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
리스트와 유사한 메쏘드 제공
>>> dir(a)
['__add__', '__class__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'buffer_info', 'byteswap', 'count', 'extend', 'fromfile', 'fromlist', 'fromstring', 'fromunicode', 'index', 'insert', 'itemsize', 'pop', 'read', 'remove', 'reverse', 'tofile', 'tolist', 'tostring', 'tounicode', 'typecode', 'write']
자세한 내용은 Library Reference 혹은 책pp175 참조


Numeric Python의 이용
배열을 이용한 각종 수학적 연산 지원(선형대수, FFT등 포함)
CD-ROM packages/Etc/NumericPython안의 ... 설치
혹은 http://pfdubois.com/numpy/ 참조

>>> from Numeric import *
>>> a = array ( ((1, 2, 3),) )
>>> a = array ( ((1, 2, 3),
(4, 5, 6),
(7, 8, 9))
)
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a[0][1]
2
>>> a * a
array([[1, 4, 9],
[16, 25, 36],
[49, 64, 81]])
>>> a + 2
array([[3, 4, 5],
[6, 7, 8],
[9, 10, 11]])
>>> sin(a) #각 연산이 가능하다.
array([[ 0.84147098, 0.90929743, 0.14112001],
[-0.7568025 , -0.95892427, -0.2794155 ],
[ 0.6569866 , 0.98935825, 0.41211849]])
>>> b = array( ((3, 2, 1),
(5, 2, 3),
(5, 2, 1))
)
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b
array([[3, 2, 1],
[5, 2, 3],
[5, 2, 1]])
>>> a * b #두 객체의 연산도 가능
array([[ 3, 4, 3],
[20, 10, 18],
[35, 16, 9]])

>>> matrixmultiply(a, b) #외적
array([[ 28, 12, 10],
[ 67, 30, 25],
[106, 48, 40]])

python5-5.jpg

파일 목록 얻기
glob.glob()
와일드 카드 문자 사용
?, *, [...]

>>> import glob
>>> glob.glob('*.py') #현재 폴더의 파일 목록을 얻을 수 있다.
[]
>>> glob.glob('d:tmp*.py') #지정 폴더 안에 목록도 얻을 수 있다.
[]
>>> glob.glob('[abc]*.py') #파일의 앞 a~c만 얻는다.
[]

파일 정보 얻기
os.path 모듈
isfile(), isdir(), islink(), ismount(), ...

>>> import os
>>> for file in glob.glob('*.py'): #파일명 불러오기
if os.path.isfile(file):
print 'normal file', file

...
>>> for file in glob.glob('*.py'): #파일명과 파일의 사이즈(byte) 불러오기
if os.path.isfile(file):
print 'normal file', file, os.path.getsize(file)
...

Python05-2.asf 끝
285개(14/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
25 [VisualStudio] Visual Studio Express 2012 다운로드/설치 첨부파일 푸딩뱃살 2731 2013.04.06 20:12
24 [Python] DC 이효리 겔러리에서 사진 추출하기 사진 artsOne 934 2009.03.27 01:54
23 [Python] 클래스 안의 함수 실행 artsOne 2546 2012.09.20 11:54
22 [Python] 기본 함수들 artsOne 4882 2012.09.12 15:39
21 [Python] Config Parser artsOne 2265 2012.08.28 13:55
20 [Python] win32 오픈오피스 실행 artsOne 2154 2012.08.01 17:38
19 [Python] 문자열의 기호들을 출력하기 artsOne 2869 2009.04.17 11:59
18 [Python] python 자료형 / 자료형 출력 artsOne 3394 2009.03.30 00:54
17 [Python] win32 모듈로 Excel 사용하기 artsOne 4113 2008.03.18 02:24
16 [Python] 용어 정리 artsone 3565 2008.02.26 23:11
15 [Python] Python 9강 - 파일 사진 첨부파일 artsone 9963 2007.11.03 02:59
14 [Python] Python 8강 - 객체의 복사 및 형 변환 사진 첨부파일 artsone 5220 2007.11.01 04:15
13 [Python] Python 7강 - 사전 사진 첨부파일 artsone 2871 2007.10.30 03:26
12 [Python] Python 6강 - 튜플 artsone 3139 2007.10.24 05:30
>> [Python] Python 5강 - 리스트 사진 첨부파일 artsone 7339 2007.10.23 22:13
10 [Python] Python 4강 - 문자열 사진 첨부파일 artsone 3701 2007.10.20 03:04
9 [Python] Python 3강 - 수치 자료형과 연산자 사진 첨부파일 artsone 4198 2007.10.18 17:01
8 [Python] Python 2강 - 파이썬 문과 기본 자료형 사진 첨부파일 artsone 5316 2007.10.15 02:25
7 [Python] Python 1강 - 파이썬이란? artsOne 3419 2007.10.11 23:36
6 [Python] [스크랩] Python은 무엇인가? artsone 2001 2008.02.26 16:20