[Python]파이썬 정리노트(계속 업데이트)
resilient
·2021. 5. 28. 02:14
728x90
반응형
list, tuple 시간복잡도
- Average: O(n)
- 하나하나 순회하기 때문에 데이터의 크기만큼 시간 복잡도를 갖게 된다.
set, dictionary 시간복잡도
- Average: O(1), Worst: O(n)
- 내부적으로 hash를 통해서 자료들을 저장하기 때문에 시간복잡도가 O(1)가 가능하고 O(n)의 경우에는 해시가 성능이 떨어졌을(충돌이 많은 경우) 때 발생한다.
python sort와 sorted의 차이
- sorted()는 새로운 정렬된 목록을 반환하며, 원래 목록은 영향을 받지 않는다.
#sorted() 메서드
sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
a = [5, 2, 3, 1, 4]
#sort() 메서드
a.sort()
a = [1, 2, 3, 4, 5]
- list.sort()은 list을 그 자리에서 정렬하고 목록 인덱스를 변경하고 None을 반환한다.(모든 내부 작업은 동일).
- sorted()은 list뿐만 아니라 반복 가능한 모든 작업에 적용할 수 있다.
- 문자열, 튜플, 딕셔너리, 제너레이터 등 모든 요소가 포함된 반복 가능한 객체를 정렬하여 반환한다.
- 따라서 list를 변경하려면 list.sort()를 사용하고, 새로운 정렬된 객체를 원하면 sorted()를 사용하면 된다.
- list의 경우에 list.sort()는 복사본을 만들 필요가 없으므로 sorted()보다 빠릅니다. 다른 이터레이터의 경우 선택의 여지가 없다. (sorted만 사용할 수 있기 때문)
zip 함수
zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 터플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다. 간단한 예제를 보자.
numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')
위 코드를 보면 numbers 리스트와 letters 리스트를 zip() 함수에 인자로 넘겨서 호출 후에, for 문으로 zip() 함수의 반환값을 대상으로 루프를 돌면서 터플을 차례로 출력하고 있다.
zip() 함수를 사용하지 않고, 인덱스(index) 변수를 사용해서 위 코드를 다시 작성해보자.
numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for i in range(3):
pair = (numbers[i], letters[i])
print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')
위와 같이 zip() 함수를 사용하면 마치 옷의 지퍼를 올리는 것 처럼 양 측에 있는 데이터를 하나씩 차례로 짝을 지어준다.
병렬 처리
zip() 함수를 활용하면 여러 그룹의 데이터를 루프를 한 번만 돌면서 처리할 수 있다. 가변 인자를 받기 때문에 2개 이상의 인자를 넘겨서 병렬 처리를 할 수 있다.
예를 들어, 아래 코드는 3개의 문자열 내의 글자를 하니씩 병렬해서 출력하고 있다.
for number, upper, lower in zip("12345", "ABCDE", "abcde"):
print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e
반응형
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 lambda 란? (1) | 2021.09.01 |
---|---|
[Python] join함수 란? (0) | 2021.07.04 |
[Python] 파이썬 eval함수 란? (0) | 2021.07.03 |
[Python] list comprehension이란? (0) | 2021.07.01 |