리스트
리스트 객체의 메서드
list.append(x)
a = [1, 2, 3]
a.append(4)
print(a)
# [1, 2, 3, 4]
리스트의 끝에 항목을 더합니다. a[len(a):] = [x] 와 동등합니다.
list.extend(iterable)
- 리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장합니다. a[len(a):] = iterable 와 동등합니다.
- iterable 객체 - 반복 가능한 객체. → list, dict, set, str, bytes, tuple, range
- iterator 객체 - 값을 차례대로 꺼낼 수 있는 객체
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
# [1, 2, 3, 4, 5, 6]
list.insert(i, x)
- 주어진 위치에 항목을 삽입합니다.
- 첫 번째 인자는 삽입되는 요소가 갖게 될 인덱스입니다.
- 그래서 a.insert(0, x) 는 리스트의 처음에 삽입하고, a.insert(len(a), x) 는 a.append(x) 와 동등합니다.
a = [1, 2, 3]
a.insert(1, 4)
print(a)
# [1, 4, 2, 3]
list.remove(x)
a = [1, 2, 3, 2]
a.remove(2)
print(a)
# [1, 3, 2]
- 리스트에서 값이 x 와 같은 첫 번째 항목을 삭제합니다. 그런 항목이 없으면 ValueError를 일으킵니다.
list.pop([i])
- 리스트에서 주어진 위치에 있는 항목을 삭제하고, 그 항목을 돌려줍니다. 인덱스를 지정하지 않으면, a.pop() 은 리스트의 마지막 항목을 삭제하고 돌려줍니다.
- (메서드 시그니처에서 i 를 둘러싼 대괄호는 매개변수가 선택적임을 나타냅니다. 그 위치에 대괄호를 입력해야 한다는 뜻이 아닙니다. 이 표기법은 파이썬 라이브러리 레퍼런스에서 지주 등장합니다.
a = [1, 2, 3]
print(a.pop(1))
# 2
print(a)
# [1, 3]
list.clear()
a = [1, 2, 3]
a.clear()
print(a)
# []
- 리스트의 모든 항목을 삭제합니다. del a[:] 와 동등합니다.
list.index(x[, start[, end]])
a = [1, 2, 3, 2]
print(a.index(2))
# 1
- 리스트에 있는 항목 중 값이 x 와 같은 첫 번째 것의 0부터 시작하는 인덱스를 돌려줍니다. 그런 항목이 없으면 [ValueError](<https://docs.python.org/ko/3/library/exceptions.html#ValueError>) 를 일으킵니다.
- 선택적인 인자 start 와 end 는 슬라이스 표기법처럼 해석되고, 검색을 리스트의 특별한 서브 시퀀스로 제한하는 데 사용됩니다. 돌려주는 인덱스는 start 인자가 아니라 전체 시퀀스의 시작을 기준으로 합니다.
list.count(x)
- 리스트에서 x 가 등장하는 횟수를 돌려줍니다.
a = [1, 2, 3, 2]
print(a.count(2))
# 2
list.sort(***, key=None, reverse=False)
a = [3, 1, 2]
a.sort()
print(a)
# [1, 2, 3]
- 리스트의 항목들을 제자리에서 정렬합니다 (인자들은 정렬 커스터마이제이션에 사용될 수 있습니다. 설명은 [sorted()](<https://docs.python.org/ko/3/library/functions.html#sorted>) 를 보세요).
list.reverse()
a = [1, 2, 3]
a.reverse()
print(a)
# [3, 2, 1]
- 리스트의 요소들을 제자리에서 뒤집습니다.
list.copy()
a = [1, 2, 3]
b = a.copy()
print(b)
# [1, 2, 3]
- 리스트의 얕은 사본을 돌려줍니다. a[:] 와 동등합니다.
이런 메서드들은 리스트를 수정할 뿐 반환 값이 출력되지 않는다. — 기본 none을 돌려준다.
이것은 파이썬에서 모든 가변 자료 구조들에 적용되는 설계 원리이다.
모든 데이터를 정렬하거나 비교할 수 없다.
- 예를 들어, 정수를 문자열과 비교할 수 없고 None을 다른 형과 비교할 수 없기 때문에 [None, 'hello', 10] 는 정렬되지 않습니다.
또한 정의된 대소 관계가 없는 형이 있습니다.
- 예를 들어, 3+4j < 5+7j는 올바른 비교가 아닙니다.
리스트를 스택으로 사용하기
리스트 메서드들은 리스트를 스택으로 사용하기 쉽게 만드는데, 마지막에 넣은 요소가 처음으로 꺼내지는 요소이다. (”last-in, first-out”).
스택의 꼭대기(마지막)에 항목을 넣으려면 append()를 사용한다.
스택의 꼭대기(마지막)에서 값을 꺼내려면 명시적인 인덱스 없이 pop()을 사용한다.
stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print(stack) #[3, 4, 5, 6, 7]
stack.pop() # 7
print(stack) # [3, 4, 5, 6]
stack.pop() # 6
stack.pop() #5
print(stack) # [3, 4]
리스트를 큐로 사용하기
리스트를 큐로 사용하는 것도 가능한데, 처음으로 넣은 요소가 처음으로 꺼내지는 요소입니다 ("first-in, first-out")
하지만, 리스트는 이 목적에는 효율적이지 않습니다. 리스트의 끝에 덧붙이거나, 끝에서 꺼내는 것은 빠르지만, 리스트의 머리에 덧붙이거나 머리에서 꺼내는 것은 느립니다 (다른 요소들을 모두 한 칸씩 이동시켜야 하기 때문입니다).
큐를 구현하려면,
양 끝에서의 덧붙이기와 꺼내기가 모두 빠르도록 설계된 [collections.deque]https://python.flowdas.com/library/collections.html#collections.deque>) 를 사용하세요.
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry 도착
>>> queue.append("Graham") # Graham 도착
>>> queue.popleft() # 처음 도착한 사람이 이제 떠납니다
'Eric'
>>> queue.popleft() # 두번째 도착한 사람이 이제 떠납니다
'John'
>>> queue # 도착한 순서대로 남아있는 큐
deque(['Michael', 'Terry', 'Graham'])
리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 만드는 간단한 방법을 제공합니다.
일반적으로 다른 시퀀스나 반복 가능한 객체의 각 원소에 대해 일부 작업을 수행하여 새로운 리스트를 만들거나,
특정 조건을 충족하는 원소들의 부분 시퀀스를 만드는 데 사용됩니다.
예를 들어, 제곱의 리스트를 만들고자 하는 경우:
squares = []
for x in range(10):
squares.append(x**2)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
리스트 컴프리헨션을 사용하여 동일한 결과를 얻을 수 있습니다. (훨씬 간결하고 쉬운 방식)
squares = [x**2 for x in range(10)]
또한 같은 식을 람다식을 이용해서 풀 수 있다.
(여기는 아직 이해가 안됨. 람다식 이해하고 다시 업데이트 할 예정)
squares = list(map(lambda x: x**2, range(10)))
설명:
이 코드는 range(10)의 각 요소에 x**2 함수를 적용하여 squares라는 리스트를 만드는데요.
map() 함수가 각 요소에 함수를 적용하고 맵 객체를 반환하며, 그 결과를 list() 함수를 사용하여 리스트로 변환합니다.
결과적으로 0부터 9까지의 숫자의 제곱이 순서대로 담긴 리스트가 생성됩니다.
lambda는 한 줄짜리 함수를 만드는 데 사용하는 키워드입니다. 람다 함수는 이름이 없으며, 한 번 사용할 수 있는 일회용 함수입니다.
예를 들어, lambda x: x**2 는 입력값 x를 받아서 x의 제곱을 반환하는 함수입니다.
이 함수를 사용하면 map()과 같은 함수에서 간단한 함수를 만들 수 있습니다.
map() 함수는 두 개의 인자를 받습니다. 첫 번째 인자는 함수이며, 두 번째 인자는 시퀀스(리스트, 튜플 등)입니다. map() 함수는 시퀀스의 각 요소에 함수를 적용하여 새로운 시퀀스를 반환합니다.
예를 들어, list(map(lambda x: x**2, [1, 2, 3, 4, 5])) 는 [1, 4, 9, 16, 25] 를 반환합니다.
이 코드에서는 lambda 함수를 사용하여 각 요소의 제곱을 구하고,
map() 함수를 사용하여 각 요소에 함수를 적용하여 새로운 리스트를 생성합니다.
리스트 컴프리헨션은 괄호 안에 표현식을 포함한 후 for 절이 따라옵니다.
그 다음에는 for 나 if 절이 0개 이상 따라옵니다.
결과는 그 뒤 따라오는 for 나 if 절의 문맥에서 표현식을 평가하여 새로운 리스트를 만듭니다.
예를 들어, 두 리스트의 요소를 결합하되 서로 같지 않은 경우를 만들려면 다음과 같이 할 수 있습니다:
[x + y for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
이 코드는 다음과 동일합니다:
results = []
for x in [1, 2, 3]:
for y in [3, 1, 4]:
if x != y:
results.append(x + y)
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
두 코드 모두 for 과 if문의 순서가 같음에 유의해야 합니다.
표현식이 튜플이면 (즉 앞의 예에서 (x, y)), 반드시 괄호로 둘러싸야 합니다.
예시:
vec = [-4, -2, 0, 2, 4]
# 값을 두배로 해서 새 리스트를 만든다.
var_1 = [x * 2 for x in vec]
print(var_1) # [-8, -4, 0, 4, 8]
# 음수를 제외하도록 리스틀르 필터링한다.
var_2 = [y for y in vec if y >= 0]
print(var_2) # [0, 2, 4]
# 모든 요소에 함수를 적용한다.
var_3 = [abs(i) for i in vec]
print(var_3) # [4, 2, 0, 2, 4]
# 각 요소에 메서드를 호출한다. 이 경우는 공백 없애주는 함수 적용
freshfruit = [' banana', ' loganberry ', 'passion fruit ']
var_4 = [weapon.strip() for weapon in freshfruit]
print(var_4) # ['banana', 'loganberry', 'passion fruit']
# (숫자, 제곱)과 같은 2-튜플 리스트를 만든다.
var_5 = [(z, z**2) for z in range(6)]
print(var_5) # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
# 튜플은 괄호로 묶어야 한다. 그렇지 않으면 에러가 발생한다.
# SyntaxError: invalid syntax 에러가 날 수 있음.
# 두 개의 'for'을 갖는 리스트 컴프리헨션으로 리스트를 평평하게 만들기
vec_2 = [[1,2,3],
[4,5,6],
[7,8,9]]
var_6 = [num for elem in vec_2 for num in elem]
print(var_6) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
마지막 컴프리헨션 이해하지 못함..
다시 볼 코드
# 두 개의 'for'을 갖는 리스트 컴프리헨션으로 리스트를 평평하게 만들기
vec_2 = [[1,2,3],
[4,5,6],
[7,8,9]]
var_6 = [num for elem in vec_2 for num in elem]
print(var_6) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
설명:
이것은 두 개의 "for" 루프를 가진 리스트 컴프리헨션의 예입니다.
이것은 리스트의 리스트를 하나의 리스트로 평평하게 만듭니다.
이 예에서 vec_2는 세 개의 하위 리스트를 가진 리스트입니다.
리스트 컴프리헨션은 vec_2의 각 하위 리스트의 각 요소를 반복하고 새 리스트 var_6에 추가합니다.
첫 번째 "for" 루프는 vec_2의 각 하위 리스트를 반복하고 두 번째 "for" 루프는 하위 리스트의 각 요소를 반복합니다.
결과적으로 생성된 var_6 리스트는 [1, 2, 3, 4, 5, 6, 7, 8, 9]입니다.
'개발공부 > Python' 카테고리의 다른 글
[파이썬] 집합(=세트, Sets)_ 기능, 메서드 (1) | 2023.04.13 |
---|---|
[파이썬] 튜플(Tuple) (0) | 2023.04.13 |
[파이썬 메서드].reverse() 리스트 뒤집기 / TypeError: 'NoneType' object is not iterable (0) | 2023.04.11 |
파이참(Pycham) 단축키 모음 (0) | 2023.04.10 |
파이썬_개발환경 조성(파이참 설치) 및 hello world 출력해보기 (0) | 2023.04.10 |