1. List 확장하기 (list Method)
리스트 데이터타입은 몇가지 메소드(내장함수)를 가지고 있습니다.
list.append(x)
리스트의 끝에 하나의 값을 더해줍니다. a[len(a):] = [x]와 같습니다.
list.extend(iterable)
입력된 값의 모든 값이 list에 더해집니다. a[len(a):] = iterable 과 같습니다.
list= ['a', 'b']
list.append('append')
list.extend('extend')
print(list)
['a', 'b', 'append', 'e', 'x', 't', 'e', 'n', 'd']
list.insert(i,x)
주어진 위치에 값을 삽입합니다. 첫번째 인수는 삽입되기 전 요소의 색인 위치입니다. a.insert(0,x)는 목록의 가장 앞에 삽입됩니다. 그리고 a.insert(len(a),x)는 a.append(x)와 같습니다.
list.remove(x)
리스트에서 x와 일치하는 값 중 첫번째를 제거합니다. x와 일치하는 값이 없으면 오류가 발생합니다.
list.pop([i])
리스트에서 주어진 위치에 있는 값을 제거합니다. a.pop()처럼 위치가 지정되지 않으면 리스트의 마지막 값을 지운 뒤 반환합니다. (i를 싸고 있는 대괄호는 i 값이 선택사항이라는 것을 의미합니다. 앞으로도 종종 보게 될 표현입니다.)
list.clear()
리스트의 모든 값을 삭제합니다. del a[:]와 같습니다.
list.index(x[, start[, end]])
x와 같은 값 중 첫번째 것의 위치를 반환합니다. 값이 없을 경우 ValueError가 나타납니다.
선택인자 start와 end는 쪼개기와 같은 의미이며, 리시트의 특정 부분을 제한하기 위해 사용합니다. 반환되는 색인위치는 start에서 선언된 위치가 아닌 리스트 전체에 시작한 것입니다.
list.count(x)
리스트에서 x가 등장하는 횟수를 반환합니다.
list.sort(key=none, reverse=false)
리스트의 값들을 정렬해줍니다. (인수는 사용자 정의 정렬에 사용할 수 있습니다, sorted()에 대한 설명을 참고하세요.)
list.reverse()
리스트의 개체들을 거꾸로 정렬해줍니다.
list.copy()
리스트의 얕은 복제를 반환합니다. a[:]와 같은 의미입니다.
insert, remove, sort와 같은 매소드는 리스트를 변경할 뿐 값을 출력해주진 않습니다. 그들의 반환 기본값은 None입니다. 이것이 파이썬에서 모든 변경 가능한 데이터 구조의 디자인 원칙입니다.
2. 리스트를 대기열로 사용하기 (Using List as Queues)
첫번째 요소는 첫번째로 반환되는 곳에서 리스트를 대기열로 이용하는 것도 가능합니다. 그러나 리스트는 이런 목적으로는 효율적이지 않습니다. 리스트의 끝에서 append나 pop의 기능이 빠른 반면에, 리스트의 시작 부분에서 insert나 pop은 느립니다. (하나의 요소가 이동하면서 모든 요소의 위치가 변해야 하기 때문입니다.)
대기열을 시도해보기 위해, 양 끝에서 append와 pop을 빠르게 할 수 있는 collection.deque를 사용합니다.
From collections import deque
q = deque(["a","b", "c"])
q.append("d")
q.append("e")
print(q)
q.popleft()
q.popleft()
print(q)
deque(['a', 'b', 'c', 'd', 'e'])
deque(['c', 'd', 'e'])
3. 복합 리스트(List Comperhensions)
복합 리스트는 리스트를 만드는 간편한 방법을 제공합니다. 공통 어플리케이션은 각 요소들에 기능을 적용하거나, 적합한 조건의 새로운 연속된 요소를 만듬으로서 새로운 리스트를 만듭니다. 예를 들어 우리는 다음과 같이 목록을 만드려고 합니다.
s = []
for i in range(10):
s.append(i**2)
print(s)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
루프구문이 완성된 후에도 남아있는 변수 x를 만듭니다. 우리는 부작용없이 리스트를 계산할 수 있습니다.
s = list(map(lambda i:i**2, range(10)))
s=[i**2 for i in range(10)]
복합 리스트는 하나 이상의 for나 if 표현식을 포함합니다. 이 표현식의 결과가 새로운 리스트로 만들어집니다. 아래의 예시는 2가지 리스트의 요소를 포함하고 있습니다.
cc = []
for a in range(3):
for b in range(3):
if a !=b:
cc.append((a,b))
print(cc)
c = [(a,b) for a in range(3) for b in range(3) if a!=b]
print(c)
복합 리스트에서는 뭉치 함수나 복합한 표현식을 쓸 수도 있습니다.
from math import pi
rpi=[str(round(pi, i)) for i in range(1,6)]
print(rpi)
4. 뭉치 복합 리스트 (Nested List Comprehensions)
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
s= [
[row[i] for row in matrix]
for i in range(4)]
print(s)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
t = []
for i in range(4) :
t_row = []
for row in matrix :
t_row.append(row[i])
t.append(t_row)
print(t)
현실적으로 복잡한 흐름 문장보다는 내장 함수를 선호할 것입니다. zip() 함수는 이런 경우 유용합니다.
a=list(zip(*matrix))
print(a)
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]