1 minute read

1. 프롤로그

파이썬 기초 과정에서 다루기 힘든 예제들이나 원리, 패턴등을 정리해보고자 한다.

2. 정렬 예제

1. sort와 sorted의 차이

score = ((1, 2), (2, 1), (3, 3))
print sorted([score[2][0], score[1][0]])
print sorted(score, key=operator.itemgetter(1))

score_2 = [(1, 2), (2, 1), (3, 3)]
score_2.sort()
print score_2

sorted() 는 주어진 iterable한 객체를 정렬하여 반환한다. 2번째 인자로 어떤 인자 기준으로 정렬을 시행할지 설정할수 있다. sort()는 주어진 List를 정렬한다. (반환하지 않는다)

3. Dictionary

1. 해쉬 테이블

해시테이블에서 데이터가 저장되는곳을 버킷 이라고 말한다. 데이터는 key, value의 쌍으로 이루어져있어 key를 통해 접근할수 있다. key를 hashfunction에 통과시킨후 버킷의 length로 moduler 연산한값으로 데이터에 접근할수 있는 구조이다. 따라서 헤시테이블을 활용하면 시간복잡도를 줄일수 있다. (운이 좋으면 O(1)) python에서 dictionary 자료형이 hash table이라고 볼수 있다.

2. Collections

collections가 제공하는 기능을 이용하면 튜플과 dictionary를 다채롭게 다룰수 있다.
(마치 java가 제공하는 LinkedList와 유사한것 같다.)

import collections
def solution(participant, completion):
    return list((collections.Counter(participant) - collections.Counter(completion)).keys())[0]

collections.Counter를 통해 주어진 iterable한 객체들의 원소와 원소의 갯수로 이루어진 Counter객체를 반환한다. 이 Counter객체는 dictionary를 상속하고 있는것으로 추측되어 keys() 함수를 통해 원소값의 집합을 따로 빼는 행위가 가능하다. Counter객체 끼리의 뺄샘도 가능하다 호호! 두객체를 빼면 음수는 제외하고 원소값의 차이를 구할수 있다! (마치 차집합이랑 성격이 비슷하다.)

3. set 자료형

def solution(n, lost, reserve):
    reserve = set(reserve) - set(lost)
    lost = set(lost) - set(reserve)
    for value in reserve:
        if value-1 in lost:
            lost.remove(value-1)
        elif value+1 in lost:
            lost.remove(value+1)
    return n - len(lost)

집합자료형은 중복을 허용하지 않는다. 이를 활용해 중복이 되면 안되는 list의 전처리에 활용할수 있다, 또한 집합 자료형은 차집합 등의 집합연산을 지원하기 때문에 이를 활용하여 문제해결과정을 용이하게 할수 있다.

4. 리스트 슬라이싱 예제

a  = [1, 2, 3, 4, 5]       
# a[start:stop:step]
# 0  1  2  3  4
# -5 -4 -3 -2 -1

a[-1]    # 5
a[-2:]   # [4, 5]
a[:-2]   # [1, 2, 3]

a[::-1]    # [5, 4, 3, 2, 1]
a[1::-1]   # [2, 1]
a[:-3:-1]  # [5, 4]
a[-3::-1]  # [3, 2, 1]

Leave a comment