[Python3] 한 줄 쓰기

Alexandria·2023년 9월 4일

Python3 Advanced

목록 보기
2/27
post-thumbnail

if

if-else 문을 한 줄로 변경해 봅니다.

if 문에 속하는 코드는 앞으로 else 문에 속하는 코드는 뒤로 보내면 한 줄로 사용할 수 있습니다.

# Multi-line
x = 0
if x < 1:
    x = 100
else:
    x = 200

# One-liner
x = 0
x = 100 if x < 1 else 200

if-elif-else도 한 줄로 변경해 볼 수 있습니다.

if 문에 속하는 코드는 앞으로 elif-else는 뒤로 보내되 if-else를 중첩하여 사용합니다.

# Multi-line
x = 0
if x < 1:
    x = 100
elif x == 1:
    x = 200
else:
    x = 300

# One-liner
x = 0
x = 100 if x < 1 else ( 200 if x == 1 else 300 )

for

for 문의 경우 if 문과는 다르게 함수나 리스트로 감싸주며 한 줄로 사용할 수 있습니다.

# Multi-line
x = []
for i in range(3):
    x.append(i)

# One-liner
x = [i for i in range(3)]

for 문의 경우 성능 향상의 이점을 위하여 한 줄 쓰기가 사용될 수 있습니다.

time 모듈을 이용하여 다음의 for 문인 경우 약 0.09초가 소요되지만 한 줄로 변경하면 더 빠른 시간(약 0.035)이 소요된다는 것을 확인할 수 있습니다.

import time
number  = 1000000

# Multi-line
x = []
s_time  = time.time()
for i in range(number):
    x.append(i)
e_time  = time.time()
print(e_time - s_time)

# One-liner
x = []
s_time  = time.time()
x = [i for i in range(number)]
e_time  = time.time()
print(e_time - s_time)

이번에는 중첩된 for 문을 한 줄로 변경해 봅니다. 한 줄로 변경할 땐 처음 나오는 for 문이 앞에 나오게 됩니다.

# Multi-line
x = []
for i in range(3):
    for j in range(3):
        x.append(i * j)

# One-liner
x = [i * j for i in range(3) for j in range(3)]

삼중 for 문도 마찬가지로 순서대로 한 줄로 적으면 됩니다.

# Multi-line
a = []
for x in range(3):
    for y in range(3):
        for z in range(3):
            a.append(x * y * z)

# One-liner
a = [x * y * z for x in range(3) for y in range(3) for z in range(3)]

for-if

if 문과 for 문만 사용되는 경우는 있긴 하지만 복합적으로 사용되는 경우가 있습니다.

다음과 같이 이중 for 문과 if-else 문을 한 줄로 변경해 볼 수 있습니다.

# Multi-line
x = []
for i in range(3):
    for j in range(3):
        if i > j:
            x.append(i + j)
        else:
            x.append(i - j)

# One-liner
x = [i + j if i > j else i - j for i in range(3) for j in range(3)]

for 문과 단일 if 문의 경우 방식이 살짝 다릅니다. if 문이 for 문 앞에 오지 않고 뒤로 가면 됩니다.

# Multi-line
x = []
for i in range(5):
    if i > 1:
        x.append(i)

# One-liner
x = [i for i in range(5) if i > 1]

lambda

lambda를 사용하면 함수를 한 줄로 변경할 수 있습니다.

다음과 같은 단순한 함수를 lambda를 이용하여 표현할 수 있습니다.

함수의 인자 명과 쌍점(:) 이후에는 반환 값을 적으면 한 줄 쓰기가 완료됩니다.

# Multi-line
def my_sum(x, y):
    return x + y

print(my_sum(3, 4))

# One-liner
print((lambda x, y: x + y)(3, 4))

for 문과 if-else 문이 존재하는 함수를 한 줄로 변환하는 법은 다음과 같습니다.

for 문과 if-else 문을 한 줄로 변경하고 lambda를 이용하여 함수도 한 줄로 변경합니다.

# Multi-line
def my_list(x):
    result = []
    for i in x:
        if i > 0:
            result.append(1)
        else:
            result.append(-1)
    return result

print(my_list([-1, 2, -5, 4]))

# One-liner
print((lambda x : [1 if i > 0 else -1 for i in x])([-1, 2, -5, 4]))

filter를 적용하면 lambda에 if 문과 for 문을 적지 않아도 적용이 가능합니다.

filter의 첫 번째 인자로는 함수가 들어가고, 두 번째 인자로는 리스트가 들어갑니다.

# Multi-line
def my_is_odd(x):
    result = []
    for i in x:
        if i % 2 != 0:
            result.append(i)
    return result
print(my_is_odd([1,2,3]))

# One-liner
print(list(filter(lambda x: x % 2 != 0, [1,2,3])))
profile
IT 도서관

0개의 댓글