list.append(x)
리스트 끝에 항목을 더합니다. a[len(a):] = [x]와 동등합니다.
list.extend(iterable)
리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장합니다. a[len(a):] = iterable과 동등합니다.
list.insert(i, x)
주어진 위치에 항목을 삽입합니다. 첫 번째 인자는 삽입되는 요소가 갖게 될 인덱스입니다. 그래서 a.insert(0, x)는 리스트의 처음에 삽입하고, a.insert(len(a), x)는 a.append(x)와 동등합니다.
list.remove(x)
리스트에서 값이 x와 같은 첫 항목을 삭제합니다.
list.pop([i]) # i는 매개변수가 선택적임을 뜻함
리스트에서 주어진 위치에 있는 항목을 삭제하고, 그 항목을 돌려줍니다. 인덱스를 지정하지 않으면,리스트의 마지막 항목을 삭제하고 돌려준다.
list.clear()
리스트의 모든 항목을 삭제합니다. del a[:]와 동등합니다.
list.index(x[, start[, end]])
리스트에 있는 항목 중 값이 x와 같은 첫 번째 것의 0부터 시작하는 인덱스를 돌려줍니다. start와 end는 슬라이스 표기법처럼 해석됩니다.
list.count(x)
리스트에서 x가 등장하는 횟수를 돌려줍니다.
list.sort(*, key=None, reverse=False)
리스트의 항목들을 제자리에서 정렬합니다.
list.reverse()
리스트의 요소들을 제자리에서 뒤집습니다.
list.copy()
리스트의 얕은 사본을 돌려줍니다. a[:]와 동등합니다.
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
fruits.count('apple')
2
fruits.count('tangerine')
0
fruits.index('banana')
3
fruits.index('banana', 4) # Find next banana starting at position 4
6
fruits.reverse()
fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
fruits.append('grape')
fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
fruits.sort()
fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
fruits.pop()
'pear'
fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange']
리스트를 스택으로 사용하기
리스트 메소드를 사용하면 추가된 마지막 요소가 검색된 첫 번째 요소(LIFO, Last In First Out)인 스택으로 목록을 매우 쉽게 사용할 수 있습니다. 스택 맨 위에 항목을 추가하려면 append()를 사용합니다. 스택 상단에서 항목을 검색하려면 pop() 명시적인 인덱스 없이 사용하세요.
stack = [3,4,5]
stack.append(6)
stack
[3, 4, 5, 6]
stack.pop()
6
stack
[3, 4, 5]
stack.pop()
5
stack
[3, 4]
리스트를 큐로 사용하는 것도 가능한데, 처음으로 넣는 요소가 처음으로 꺼내지는 요소입니다. (FIFO) 하지만, 리스트는 이 목적에는 효율적이지 않습니다. 리스트의 끝에 덧붙이거나 끝에서 꺼내는 것은 빠르지만, 리스트의 머리에 덧붙이거나 머리에서 꺼내는 것은 느립니다.
큐를 구현하려면 양 끝에서 덧붙이기와 꺼내기가 모두 빠르게 설계된 collections.deque를 사용하면 됩니다.
from collections import deque
queue = deque(["Eric", "john", "Michel"])
queue = append("Terry")
queue.append("Terry")
queue.append("Graham")
queue.popleft()
'Eric'
queue.popleft()
'john'
queue
deque(['Michel', 'Terry', 'Graham'])
리스트 컴프리헨션은 리스트를 만드는 간결한 방법을 제공합니다. 흔한 용도는, 각 요소가 다른 시퀀스나 이터러블의 멤버들에 어떤 연산을 적용한 결과인 리스트를 만들거나, 어떤 조건을 만족하는 요소들로 구성된 서브 시퀀스를 만드는 것입니다.
squares = [] for x in range(10): squares.append(x**2) squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81
이것은 x라는 이름의 변수를 만들고(또는 덮어쓰고) 루프가 종료된 후에도 남아있게 만드는 것에 유의하세요. 어떤 부작용도 없이, 제곱수의 리스트를 이런 식으로 계산할 수 있습니다.
squares = [] for x in range(10): squares.append(x**2) squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81
이는 다음과 동등합니다.
combs = [] for x in [1,2,3]: for y in [3,1,4]: if x != y: combs.append((x,y)) combs [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]vec = [-4, -2, 0, 2 ,4] [x * 2 for x in vec] [-8, -4, 0, 4, 8] [x for x in vec if x >= 0] [0, 2, 4] freshfruis = ['banana', 'loganberry ', 'passion fruit '] [weapon.strip() for weapon in freshfruits] ['banana', 'loganberry', 'passion fruits'] [(x, x**2) for x in range(6)] [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] [x, x**2 for x in range(6)] # the tuple must be parenthesized, otherwise an error is raised SyntaxError: did you forget parentheses around the comprehension target? vec = [[1,2,3], [4,5,6], [7,8,9]] [num for elem in vec for num in elem] # flatten a list using a listcomp with two 'for' [1, 2, 3, 4, 5, 6, 7, 8, 9]
리스트 컴프리헨션은 복잡한 표현식과 중첩된 함수들을 포함할 수 있습니다.
from math import pi [str(round(pi, i)) for i in range(1, 6)] ['3.1', '3.14', '3.142', '3.1416', '3.14159']
리스트 컴프리헨션의 첫 표현식으로 임의의 표현식이 올 수 있는데, 다른 리스트 컴프리헨션도 가능합니다.
matrix = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
]
[[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
transposed = []
이것은 다음과 같습니다.
for i in range(4): transposed_row = [] for row in matrix: transposed_row.append(row[i]) transposed.append(transposed_row)
transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
> 복잡한 흐름문 보다 내장 함수를 선호하는 것이 좋습니다. 이 경우에는 zip() 함수가 제 역할을 할 수 있습니다.
list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
### python 내장함수
> zip( *iterables, strict = False)
> 여러 반복 가능 항목을 병렬로 반복하여 각 항목의 항목이 포함된 튜플을 생성합니다. 더 공식적으로는, zip() 튜플의 반복자를 반환합니다. 여기서 i 번째 튜플은 iterables 인수 각각의 i번째 요소를 포함합니다.
for item in zip([1,2,3], ['sugar', 'spice', 'everything nice']):
print(item)
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')
> 고려해야할 사항은 전달된 반복 가능 항목의 zip() 길이가 다를 수 있다는 것입니다. 때로는 의도적으로, 때로는 이러한 반복 가능 항목을 준비한 코드의 버그로 인해 발생합니다.
기본적으로 zip() 함수는 가장 짧은 반복 가능 항목이 소진되면 중지됩니다. 더 긴 iterable 항목의 나머지 항목을 무시하고 결과를 가장 짧은 반복 가능 길이로 잘라냅니다.
list(zip(range(3), ['fee', 'fi', 'fo', 'fum']))
[(0, 'fee'), (1, 'fi'), (2, 'fo')]
list(zip(('a', 'b', 'c'), (1,2,3), strict=True))
[('a', 1), ('b', 2), ('c', 3)] # strict=True는 두 항목의 길이가 같다!
for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True):
print(item)
(0, 'fee')
(1, 'fi')
(2, 'fo')
ValueError: zip() argument 2 is longer than argument 1
> itertools.zip_longest()를 활용하면 더 짧은 iterable 항목에 상수 값을 추가하여 모든 반복 가능 항목의 길이를 동일하게 만들 수 있습니다.
> zip()을 * 연산자와 함께 쓰면 리스트를 unzip할 수 있습니다.
x = [1,2,3]
y = [4,5,6]
list(zip(x,y))
[(1, 4), (2, 5), (3, 6)]
x2, y2 = zip(*zip(x,y))
x == list(x2) and y == list(y2)
True
여기서부턴 숙제... 도저히 시간이 안 나와서요..
### join()
### exit() 함수
### if not :
### pop() 함수
### map() 함수