오늘 나는 (TIL)

[TIL 240625] Map 과 Lambda, 그리고 수의 진수 바꾸기

thebuck104 2024. 6. 25. 23:21

어제 SQL을 했으니, 오늘은 파이썬을 해보기로 했다.

 

학습한 내용은 아래와 같다

 


1. 한 줄로 쓰기

예시)

def solution(s):
    return s.isdigit() and len(s) in (4,6)

 

is.digit 이면서 length가 4 혹은 6인 것을 모두 True 하는 것

이런 식으로 많은 것들을 한 줄로 쓸 수 있다.

 

2. map과 lambda > 한 줄 쓰기 콤비

예시)

def solution(s):
    s = s.split(" ")
    new2 = []
    for char in s:
        new = ""
        for i in range(len(char)):
            if i%2:
                new+=char[i].lower()
            else:
                new+=char[i].upper()
        new2.append(new)
    return " ".join(new2)

 

이랬던 것이

def solution(s):
    return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))

 

좀 길지만 한 줄이 되었다.

 

a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a))
print (a)

[1, 2, 3, 4]

################################

(lambda x,y: x + y)(10, 20) 

30

 

map은 iteration의 한 종류로 위의 예시는 list a에 있는 수들을 iterate해 int 함수에 넣고, 이를 다시 list화 한 것

 

lambda는 일종의 한 줄짜리 함수로 예시는 변수 x,y가 있고, 동작은 x+y일 때, x=10이고 y=20이다 를 뜻한다.

 

3. math 모듈의 LCM과 GCD 함수

예시)

import math

#n과 m의 최대공약수, 최소공배수 찾기
def solution(n, m):
    return [math.gcd(n,m), n*m/math.gcd(n,m)]

def solution2(n, m):
    return [math.gcd(n,m), math.lcm(n,m)]
	#lcm 함수는 python 3.9부터 가능

 

최소공배수(Least Common Multiple)와 최대공약수 (Greatest Common Divisor)를 함수를 활용해 찾을 수 있다.

 

4. 진수 바꾸기

예시)

a) 10진법을 n진법으로

answer = ''
while number>0: # number가 0이 될 때 까지 반복
    number, mod = divmod(number, n) # 몫과 나머지를 반환해주는 divmod 함수
    								# number //= n
    answer += str(mod) # n으로 나눈 나머지를 answer에 추가

print(answer[::-1]) # answer를 뒤집어주면 n진수가 된다

#############################

bin() # 2진법으로
oct() # 8진법으로
hex() # 16진법으로

10진수를 n진수로 바꾸는 법은

n으로 나눈 나머지를 순서대로가 아닌 거꾸로 읽어주면 n진법 수가 된다.

 

위의 예시는 numer를 n으로 나누며 number가 존재할 때까지 반복하 그 나머지를 모아 뒤집는다.

 

b) n진법을 10진법으로

int(string, base)

 

기본적으로 int 함수를 사용하면 base진수의 string으로 된 수가 10진수로 return 된다.