이전 편에서 if, for 등에 대해서 언급하면서 한줄 수식에 대해서 잠깐 언급했었다.
2022.12.08 - [Python/Study] - python(study) - class (부모, 자식 class, init, super)
이번에는 조금 더 자세히 알아보자.
우선 한번 설명했었던 한줄 for 문이다. 아래처럼 기존 list의 값을 원하는대로 바꿔서 새로운 list를 만들 수 있다.
one = [1,2,3]
print(one)
one_for = [i + 10 for i in one]
print(one_for)
[1, 2, 3]
[11, 12, 13]
다음은 if 문을 한줄로 만들어보자. if 구문이 들어가고 조건에 맞으면 ( : ) 이후 내용을 수행한다.
if 5 > 1 :
print("YES")
if 5 > 6 :
print("YES")
if 5 > 1 : print("YES")
if 5 > 6 : print("YES")
YES
YES
이번에는 if ~ else 문을 한줄로 만들어보고 기존 if ~ else와 비교해보자. 뭔가 더 간단해진 것 같기도 하고..
if 5 > 1 :
print("YES")
else :
print("NO")
if 5 > 6 :
print("YES")
else :
print("NO")
print("YES") if 5 > 1 else print("NO")
print("YES") if 5 > 6 else print("NO")
YES
NO
YES
NO
그렇다면 if ~ elif ~ else 구문은 어떻게 될까? 한번 만들어보자. 아래처럼 변경이 가능하다. elif 가 아니라 else를 한번 더 넣어야 한다.
a = 3
if a == 1 :
print("IF")
elif a == 3 :
print("ELIF")
else :
print("ELSE")
print("IF") if a == 1 else print("ELIF") if a == 3 else print("ELSE")
ELIF
ELIF
한줄구문을 조금 더 보기 위해 아래 내용을 확인해보자. a 값에 따른 pirnt 결과를 보면 어떻게 매칭이 되는지 조금 더 쉽게 확인할 수 있다.
a = 1
print("IF") if a == 1 else print("ELIF") if a == 3 else print("ELSE")
a = 3
print("IF") if a == 1 else print("ELIF") if a == 3 else print("ELSE")
a = 5
print("IF") if a == 1 else print("ELIF") if a == 3 else print("ELSE")
IF
ELIF
ELSE
그럼 마지막으로 zip과 *zip에 대해서 알아보고 이또한 한줄함수로 확인해보자.
zip은 말그대로 여러개의 list를 합쳐준다. 아래를 결과값을 보면 확실히 파악이 가능하다.
list1 = [1,2,3]
list2 = ["a","b","c"]
list3 = ["가", "나", "다"]
list_sum = zip(list1,list2,list3)
print(list(list_sum))
[(1, 'a', '가'), (2, 'b', '나'), (3, 'c', '다')]
그렇다면 unzip은 어떻게 할까? 아래처럼 zip 안쪽에 변수를 입력할 때 *를 붙이면 된다.
list_sum = [(1, 'a', '가'), (2, 'b', '나'), (3, 'c', '다')]
list1, list2, list3 = zip(*list_sum)
print(list1)
print(list2)
print(list3)
(1, 2, 3)
('a', 'b', 'c')
('가', '나', '다')
어라.. 결과값이 ()로 되어 있는걸 보니 type이 tuple인가보네.. 필요에 따라 list로 변경해주면 된다.
list_sum = [(1, 'a', '가'), (2, 'b', '나'), (3, 'c', '다')]
list1, list2, list3 = zip(*list_sum)
print(list(list1))
print(list(list2))
print(list(list3))
[1, 2, 3]
['a', 'b', 'c']
['가', '나', '다']
마지막은 zip도 한줄함수로 변경해보자! 이전에 설명한 for랑 똑같다. (간단하다.)
list1 = [1,2,3]
list2 = ["a","b","c"]
for x, y in zip(list1,list2):
print(f'{x} / {y}')
zip_list = [print(f'{x} / {y}') for x, y in zip(list1,list2)]
1 / a
2 / b
3 / c
1 / a
2 / b
3 / c
아니면 이런식으로 특정 부분만 변수에 바로 담을수도 있다.
list1 = [1,2,3]
list2 = ["a","b","c"]
zip_list = [[x+2,y] for x, y in zip(list1,list2)]
print(zip_list)
[[3, 'a'], [4, 'b'], [5, 'c']]
한가지 내용을 더 추가하고자 한다. 변수에 담을 때 특정 조건을 만족하는 값들만 담는 경우이다. (제일 마지막에 if x < 2를 추가했다.) 해당 내용도 많이 쓰이므로 참고해두면 좋다.
list1 = [1,2,3]
list2 = ["a","b","c"]
zip_list = [[x+2,y] for x, y in zip(list1,list2) if x < 2]
print(zip_list)
궁금하신 점은 언제나 댓글 달아주세요.
'Python > Study' 카테고리의 다른 글
python 기초 - 지역변수, 전역변수, 동적변수 (local, global, globals 등) (0) | 2023.01.15 |
---|---|
python 기초 - 예외 처리 (try, except, finally, Error처리) (1) | 2023.01.15 |
python 기초 - class (부모, 자식 class, init, super) (0) | 2023.01.15 |
python 기초 - 함수 (*args, **kwargs) (0) | 2023.01.15 |
python 기초 - print 활용 (sep, end, r, f , file 등) (0) | 2023.01.15 |