갈루아의 반서재

 

파이썬 리스트의 특징

  • 가변적
  • 다양한 타입 포함가능
  • 순차적 접근 (순서나 내용이 바뀔 때 유용)
  • 동일한 값 중복해서 넣을 수 있음

이하 사용할 예제는 다음과 같음

>>> mylist = [‘a’,’b’,’c’,’w’,’d’,’e’,’f’,’g’,’h’,’i’,’w’]
>>> mytuple = (‘x’,’y’,’z’)

리스트의 생성

>>> mylist = []
>>> mylist = list( )

리스트로의 변환

>>> list(‘word’)
['w', 'o', 'r', 'd']

>>> text = ‘We strongly encourage maintainers of third-party Python projects to test with 3.8 during the beta phase and report issues found to the Python bug tracker as soon as possible.’
>>> text.split()
['We',  'strongly', 'encourage', 'maintainers', 'of', 'third-party', 'Python', 'projects', 'to', 'test', 'with', '3.8', 'during', 'the', 'beta', 'phase', 'and', 'report',
 'issues', 'found', 'to', 'the', 'Python', 'bug', 'tracker', 'as', 'soon', 'as', 'possible.']

>>> mylist2 = list(mytuple)
>>> mylist2
['x', 'y', 'z']

# join() 을 이용하여 문자열로 변환, split()의 반대기능 수행
>>> ', '.join(mylist)
'a, b, c, w, d, e, f, g, h, i, w'

>>> separator = ' * '
>>> joined = separator.join(mylist)
>>> joined
'a * b * c * w * d * e * f * g * h * i * w'

>>> separated = joined.split(separator)
>>> separated
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

리스트 슬라이싱

# 슬라이스 역시 리스트
# 기본형식은 다음과 같음. start 포함해서 stop 직전까지 step 별로 생성
>>> mylist[start:stop:step] 

# start 부터 stop-1 까지
>>> mylist[start:stop] 
>>> mylist[1:3]
['b', 'c']

# start 부터 나머지 전부
>>> mylist[start:]     
>>> mylist[1:]
['b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

# 처음부터 stop-1 까지 
>>> mylist[:stop]
>>> mylist[:4]
['a', 'b', 'c', 'w']

# 전체 복사
>>> mylist[:]
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

# 음수 인덱스를 사용하면 뒤에서부터 시작점이 -1 
# 아주 긴 리스트에서 리스트 말미에 있는 아이템을 추출할 때 용이함
# 리스트내 아이템 전체를 반전해서 보여줌, step=-1
>>> mylist[::-1]
['w', 'i', 'h', 'g', 'f', 'e', 'd', 'w', 'c', 'b', 'a']

>>> mylist[1:-1]
['b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i']

# 반전된 첫 2개 아이템 
>>> mylist[1::-1]   
['b', 'a']

# 반전된 마지막 2개 아이템
>>> mylist[:-3:-1]  
['w', 'i']

# 마지막 아이템 2개를 제외한 반전된 리스트
>>> mylist[-3::-1]  
['h', 'g', 'f', 'e', 'd', 'w', 'c', 'b', 'a']

리스트의 복사

# 리스트를 독립적으로 복사하는 3가지 방법. copy_a 리스트 아이템의 값을 변경하는 것은 copy_b 나 copy_c 에는 변경을 끼치지 않는다. 
• 리스트 copy() 함수
>>> copy_a = mylist.copy()

• list() 변환함수
>>> copy_b = list(mylist)

• 리스트 슬라이스 [:]
>>> copy_c = mylist[:]

리스트의 정렬

#  sorted() 를 통해 리스트내 아이템을 정렬한 복사본을 만들 수 있음
# 문자열인 경우 알파벳 순으로, 숫자인 경우 오름차순으로 정렬됨
# 복사본이므로 mylist 에는 영향을 주지못함
>>> sorted_mylist = sorted(mylist)
>>> sorted_mylist
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'w', 'w']

# 하지만 list 함수인 sort() 는 리스트 자체를 변경한다
>>> mylist.sort()
>>> mylist
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'w', 'w']

# 아이템이 서로 다른 타입인 경우에는 다른 형태로 자동 변환됨
>>> mylist_mixed2 = [1,3,0.5,999]
>>> mylist_mixed2.sort()
>>> mylist_mixed2
[0.5, 1, 3, 999]

# 기본값은 오름차순이지만 내림차순으로도 정렬 가능
>>> mylist.sort(reverse=True)
>>> mylist
['w', 'w', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

리스트의 참조

# = 를 통해 리스트에 하나 이상의 변수를 할당하는 경우에는 아이템의 값이 변경되는 이를 참조하는 변수 리스트도 변경된다.
>>> mylist_x = mylist
>>> mylist_x
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

>>> mylist[0] = ‘www'
>>> mylist
['www', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

>>> mylist_x
['www', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

mylist_x 는 같은 리스트 객체 mylist 를 참조할 뿐이다. 따라서 리스트 컨텐츠의 변경은 양쪽 모두에 반영된다.

리스트 비교

>>> copy_a == copy_b
True

리스트 병합

>>> mylist.extend(mylist2)
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w', 'x', 'y', 'z']

>>> mylist += mylist2
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w', 'x', 'y', 'z']

 

리스트내 아이템에 대한 접근

# offset 으로 하나의 항목을 추출
>>> mylist[2]
‘c’

# 음수의 인덱스는 뒤에서부터 추출함
>>> mylist[-1]
‘z’

# 범위를 벗어나는 경우 IndexError 발생
>>> mylist[10]
IndexError: list index out of range and python

# 복수 인데스로 리스트에 포함된 리스트의 아이템 접근가능
>>> mylist[2] = mylist2
>>> mylist
['a', 'b', ['x', 'y', 'z'], 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

>>> mylist[1][0]
'y'

리스트내 아이템 변경

# offset 으로 항목바꾸기. 가져와서 바꾼다
>>> mylist[1] = ‘z’
>>> mylist[1]
‘z’

리스트내 아이템 추가

# 맨뒤에 추가
>>> mylist.append(‘p’)
>>> mylist
['a', 'b', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w',’p’]

# 원하는 위치에 추가
>>> mylist.insert(4,’c’)
>>> mylist
['a', 'b', 'c', 'w', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

리스트내 아이템 삭제

# offset 으로 항목 삭제
>>> del mylist[2] 
>>> mylist
['a', 'b', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

>>> mylist[3].del() # del 은 리스트 메소드가 아닌 구문임. 
SyntaxError: invalid syntax

# 값으로 항목삭제, 위치를 모르는 경우
>>> mylist.remove(‘b’)
>>> mylist
['a', 'c', 'w', 'd', 'e', 'f', 'g', 'h', 'i', 'w']

# 아이템 가져오면서 동시에 삭제
# pop(0) 리스트의 head (start) 반환
>>> mylist.pop(0)
‘a’

# pop() 이나 pop(-1) 은 리스트의 tail (end) 반환
>>> mylist.pop()
‘w’

>>> mylist.pop(1)
‘w’

리스트내 아이템 찾기

# 값으로 offset 찾기
>>> mylist.index('c')
2

# 리스트에 해당값이 존재하는지 확인하기 
>>> ‘d’ in mylist
True

# 해당값이 여러번 등장하는 경우
>>> ‘w’ in mylist
True

# 등장횟수 카운팅
>>> mylist.count(‘w’)
2

# 리스트내 아이템 갯수 반환
>>> len(mylist)
11

# 최대, 최소값 찾기
>>> min(mylist)
‘a’

>>> max(mylist)
‘w’