deck:: Logseq/coding tip

- ## **► 이차원 배열(n*m) 생성** #card
  id:: 690daa52-9b76-4367-bcf3-386b33637eb0
	- ```python
	  arr = [[0]*m for _ in range(n)]
	  ```
- ## **► lambda(람다) 함수**
	- ### **◼︎ 정의** #card
	  id:: 690daba5-24c2-4cdc-9373-3e1924b96cb7
		- 파이썬에서 이름이 없는 익명 함수를 만드는데 사용되는 키워드
		- def 키워드로 정식으로 정의되는 함수보다 훨씬 간결하게, 간단한 함수를 만들 때 사용됨
	- ### **◼︎ 핵심 개념** #card
	  id:: 690dae10-920a-4ce0-a098-c9053307f872
		- 이름이 없다 : 변수에 할당하여 사용할 수는 있지만 함수 자체에는 이름이 없다.
		- 일회성 : 주로 다른 함수의 인자로 전달되어 한 번만 사용되고 사라지는 용도로 많이 쓰인다.
			- 변수에 할당해서 여러번 사용은 가능하지만 주된 사용법이 아니고 권장되지도 않는다.
		- 간결함 : 복잡한 로직이 아닌, 간단한 연산을 수행하는 함수를 빠르게 정의할 수 있다.
			- 함수 내부에서 변수를 할당하거나 여러 줄의 복잡한 문장을 사용할 수 없고 오직 하나의 표현식만 허용된다.
	- ### **◼︎ 구문** #card
	  id:: 690dae7c-8d83-4eed-99d6-40f83ec11494
		- ```python
		  lambda 인자1, 인자2, ... : 함수정의
		  # 인자의 개수가 여러개라면 여러개를 콜론으로 구분해서 쭉 나열한다
		  # 인자들을 나열한 뒤 콜론으로 구분한 뒤 뒤에 함수를 정의한다.
		  
		  # 변수로 할당하기
		  add_lambda = lambda x, y : x+y
		  print(add_lambda(1,2)) # 3
		  
		  # 고차함수에 인자로 전달해서 선언하기
		  nums = [1,2,3,4,5]
		  evens = list(filter(lambda x: x % 2 == 0, nums))
		  print(evens) # [2,4]
		  ```
- ## **► 유틸 함수 모음**
	- ### **◼︎ 정렬함수 (sort, sorted)**
		- **◉ sort() vs. sorted() 간단 비교**
			- ![image.png](../assets/image_1762505444818_0.png) #card
			  id:: 690db22d-8f77-40b6-8d9a-64fe17f33459
				- ![image.png](../assets/image_1762505372788_0.png)
		- **◉ 사용 인자**
			- reverse #card
			  id:: 690db312-4c67-4fb8-b41a-7c136b2b9f73
				- 이 키워드가 True이면 내림차순, False면 오름차순으로 정렬함
				- 기본값은 False이고 따라서 따로 지정하지 않으면 기본적으로 오름차순으로 동작함.
				- ```python
				  numbers = [3, 1, 4, 1, 5, 9]
				  numbers_reverse = [3, 1, 4, 1, 5, 9]
				  
				  numbers.sort() # [1,1,3,4,5,9]
				  numbers.sort(reverse=True) # [9,5,4,3,1,1]
				  ```
			- key #card
			  id:: 690db41f-a507-4ce3-93cb-57f749174d01
				- 정렬의 기준을 지정하는 함수를 인자로 받음
				- 리스트의 모든 인자에 대해 이 key에 들어간 한수를 한번씩 입력으로 들어간 뒤 이에 대한 비교용 값(proxy value)을 계산해서 반환함.
				- 이 반환된 값을 기준으로 오름차순(reverse=True의 경우에는 내림차순)으로 정렬함
				- key에 전달되는 함수는 다음과 같다
					- len, abs, str 등 내장함수
					- lambda를 활용한 복잡한 객체나 특정 조건에 대한 정렬기준을 정의
					- def로 정의된 함수로 정렬기준이 복잡하고 여러줄의 코드가 필요할 때 사용
				- key에 전달된 함수는 단일 값, 혹은 튜플형태의 반환값을 가져야 한다.
					- 튜플형태라면 앞 요소부터 기준에 맞게 정렬하고 같을 경우 그 다음 요소를 비교해서 정렬한다.
			- 예제 모음
				- ```python
				  # 공통 예제 데이터
				  players = [
				      {'name': 'Son',    'team': 'Tottenham', 'goals': 23, 'assists': 7},
				      {'name': 'Kane',   'team': 'Tottenham', 'goals': 17, 'assists': 9},
				      {'name': 'Salah',  'team': 'Liverpool', 'goals': 23, 'assists': 13},
				      {'name': 'De Bruyne', 'team': 'Man City',  'goals': 15, 'assists': 8},
				      {'name': 'Mane',   'team': 'Liverpool', 'goals': 16, 'assists': 2},
				      {'name': 'Jota',   'team': 'Liverpool', 'goals': 15, 'assists': 4},
				  ]
				  ```
					- 이름 기준 사전순 정렬 #card
					  id:: 690dcc7a-cd85-428a-a734-337df0430ef6
						- ```python
						  players.sort(key=lambda p: p['name'])
						  ```
					- 득점(goals) 기준 내림차순 정렬 #card
					  id:: 690dccf5-9182-401f-84c7-95f9c44d14de
						- ```python
						  players.sort(key=lambda p: -p['goals'])
						  ```
					- 공격포인트(goals + assists) 값 기준 내림차순, 같다면 팀 이름 사전순, 팀이 같다면 선수 이름 사전순 #card
					  id:: 690dcd55-e279-4f3f-a75f-579d0612bfef
						- ```python
						  players.sort(key=lambda p: (-(p['goals'] + p['assists']), p['team'], p['name']))
						  ```
					-