
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 문의 경우 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)]
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를 이용하여 표현할 수 있습니다.
함수의 인자 명과 쌍점(:) 이후에는 반환 값을 적으면 한 줄 쓰기가 완료됩니다.
# 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])))