본문 바로가기

Python/Python4

2차원 List 에서 distinct 처리하기 List에서 element를 distinct 처리하기 위해서 set()을 쓰곤 한다. 하지만 List를 element로 갖는 2차원 List에서 distinct 처리를 하기 위해 set()을 사용하는 경우 아래와 같이 TypeError가 난다. data = [ [1, 1], # duplicated [2, 2], # unique [1, 1], # duplicated ] set(data) # Exception has occurred: TypeError # unhashable type: 'list' List는 mutable 이기 때문에 hash를 지원하지 않기 때문에 List element를 tuple로 변환한 뒤 set()을 사용해야 한다. (참고: In Python, why is a tuple hashab.. 2024. 2. 12.
== 와 is 비교 값이 같은지를 확인할 때 == 를 주로 사용한다. 그리고 값이 None 인지를 확인할 때는 is 를 사용한다. 그럼 == 와 is 의 차이는 무엇일까? == : value equality, 값이 같은지를 확인한다. is : reference equality, 참조가 같은지를 확인한다. l1 = [] l2 = [] print(l1 == l2) # True print(l1 is l2) # False 위 결과 l1 == l2 는 True이고 l1 is l2 는 False이다. 리스트를 선언하여 변수에 할당할 때, 새로운 list object가 생성되어 변수에 할당되기 때문에 l1과 l2는 서로 다른 list object를 참조하게된다. 그렇기 때문에 l1, l2 모두 빈 list이기 때문에 값은 같지만 (==.. 2020. 12. 28.
function의 default parameter 사용 시 주의점 파이썬은 함수를 정의할 때 default parameter(기본값)을 같이 정의할 수 있다. 편리한 기능이지만 아래와 같이 list나 dictionary와 같은 object를 사용할 경우 버그가 날 확률이 높다. (물론 의도적이라면 예외이다.) def list_func(li=[]): li.append('test') print('li:', li) print('#############') list_func() # li: ['test'] list_func() # li: ['test', 'test'] list_func() # li: ['test', 'test', 'test'] list_func() # li: ['test', 'test', 'test', 'test'] 아무 parameter도 전달하지 않았을 경우.. 2020. 12. 28.
*args, **kwargs에 대해서 우선 _args와 *_kwargs에 대해 알아보기 전에, python에는 Packing과 Unpacking이라는 것이 있다. Packing 여러개의 데이터를 list, tuple 등의 컬렉션으로 감싸는 것 (묶는 것) greetings = ('hello', 'konnichiwa', 'annyneong',) Unpacking 컬렉션의 element들을 여러 변수에 푸는 것 en, jp, ko = greetings 이제 함수를 보자 def args_func(*args): print(args) print(type(args)) # args_func(1, 2, 3) # (1, 2, 3) args_func((1, 2, 3)) # ((1, 2, 3),) # (1, 2, 3) 이 tuple의 element로 들어간다... 2020. 12. 28.