I. 다중 할당 <Multiple Assignment> (같은 값을 할당해주는 경우)
# 기존
a = 100
b = 100
c = 100
Python에서 변수에 같은 값들을 할당해주는 경우,
# sugar🌟
a = b = c = 100
II. 파이썬 변수 교환 <Pythonic Swap>
# 기존
tmp = a # 임시 공간 'tmp'에 변수 a의 값 할당
a = b # 변수 'a' 에 b의 '값' 할당
b = tmp # 변수 b' 에 변경되기 이전의 'a' 값을 담고 있는 'tmp'의 값 할당
두 변수의 값을 서로 교환해주려면 위 와 같이 임시 공간이 필요했었는데요,
다음과 같은 방법으로 더욱 이해하기 쉽고 간단하게 표현할 수 있습니당
# sugar🌟
a, b = b, a
(이러한 방식을 tuple unpacking 이라 하는데 아래 VI. 리스트/튜플 언패킹 에
서 조금 더 자세히 확인하실 수 있습니당🙌🙌)
III. 'FT'[boolean]
Python에서 '문자열'을 바로[인덱스]로 접근할 수 있는 것과 False는 0, True는 1
에 대응하는 값을 나타냄을 응용한 방법입니당
# 'abc'[0] 👉 'a', 'abc'[1] 👉 'b' , 'abc'[2]👉 'c'
# int(False) 👉 0 , int(True) 👉 1
print('FT'[False]) # F
print('FT'[True]) # T
IV. 비교 연산자 합치기 <Chaining comparison operators>
# 기존
if((a < b) and (b <= c)):
...
위와 같이 나열된 bool 연산을 아래와 같이 줄여줄 수 있습니당
# sugar🌟
if(a < b <= c):
...
V. 삼항 연산자 <Ternary operator>
# 기존
if(condition):
x = true_option
else:
x = false_option
위와 같은 if-else 문을 한 줄로 줄여주는 놀라운 친구예용
# sugar🌟
x = true_option if condition else false_option
VI. 리스트/ 튜플 언패킹 < List / Tuple Unpacking >
변수들과 할당할 값을 튜플(혹은 리스트)로 묶어주어 한번에 할당해줄 수 있는
방법이예용
위에 있는 ' II. 파이썬 변수교환'도 바로 이 튜플 언패킹을 이용한 방법입니다🙌🙌
# 기존
a = 1
b = 2
c = 3
여러 변수들에 서로 다른 값들을 할당해 줄 때 사용하면 좋겠죵?!
#sugar🌟
(a, b, c) = (1, 2, 3)
# 위와 같이 (소괄호)로 묶어주는 자료구조를 튜플이라 합니다
# 튜플은 아래처럼 괄호를 생략하여 사용할 수 있습니다
a, b, c = 1, 2, 3
+ 다음은 변수들에 리스트/튜플 안에 있는 값들을 할당해주는 언패킹 입니당
# 기존
li = [1, 2, 3] # 리스트
a = li[0] # print(a) 👉 1
b = li[1] # print(b) 👉 2
c = li[2] # print(c) 👉 3
tp = (4, 5, 6) # 튜플
d = tp[0] # print(d) 👉 4
e = tp[1] # print(e) 👉 5
f = tp[2] # print(f) 👉 6
이 또한 아래와 같이 바꿀 수 있습니다
단, 리스트/튜플의 길이가 할당해주고자 하는 변수의 개수와 동일해야 합니당
# sugar🌟
li = [1, 2, 3] # 리스트
a, b, c = li
tp = (4, 5, 6) # 튜플
d, e, f 습니다 ]
[아래는 사전 자료구조를 for문을 통해 탐색할 때 많이 보게 되실 문법(?) 이예용 아직 '사전' 챕터를 완료하지 않으셨다면 잠시 패스하셔도 좋아용]
🌟 나중에 사전(dict) 자료구조를 배우게 되면 다음과 같은 for문을 많이 마주하게 되실거예용
for key, value in some_dict.items():
이 곳에서도 튜플 언패킹이 사용되었던 것이예용🙌🙌
dict의 함수 중 items()라는 함수는 dict 자료구조 안에 {키: 값}으로 저장된 요소들을
다음과 같이 (앞자리엔 '키', 뒷자리엔 '값')으로 묶어진 튜플 리스트와 비슷한 형태로 반환해줍니다
some_dict = {"하나": 1, "둘": 2, "셋": 3}
print(some_dict.items())
# dict_items([('하나', 1), ('둘', 2), ('셋', 3)])
# (위와 같은 유사 리스트의 정확한 명칭은 "딕셔너리 뷰 객체" 라구 합니당)
items()로 반환된 유사 리스트를 for문으로 순환 할 때 변수 key와 value엔 (키, 값)이 튜플 언패킹으로 할당되고 있었던 습니당]
VII. Comprehension
리스트, [ 세트(set) ], 딕셔너리(사전) 과 같은 자료구조들을 한 줄로 간단하게 생성할 수 있도록 만들어주는 친구입니다🙌🙌
중첩된 자료구조를 해체 혹은 생성하기 위해 다중 for문을 사용하는 경우 굉장히 유용합니다
+ 리스트 컴프리헨션 <List Comprehension>
'패트와매트'님께서 이전에 작성해주신 [ [팁] 리스트 컴프리헨션 정리 ] 게시물을 확장했음을 밝힙니당
보통 새로운 리스트를 만들고 for문으로 요소들을 등록해주기 위해선 아래와 같은 과정을 거치게 되죵?
# 기존
li = []
for 요소 in 순환가능한객체:
if 조건:
li.append(계산된요소)
위 방법을 다음과 같이 한 줄로 표현해주는 방식을 '리스트 컴프리헨션'이라 합니다
# sugar🌟
li = [ 계산된요소 for 요소 in 순환가능한객체 if 조건 ]
예시로 1부터 9사이의 홀수 리스트를 생성하는 방법에 대해 기존 방법과 리스트 컴프리헨션을 비교해볼게용
# 기존
li = []
for odd in range(1, 10):
if odd % 2 != 0:
li.append(odd)
print(li) # [1, 3, 5, 7, 9]
# sugar🌟: 리스트 컴프리헨션
li = [odd for odd in range(1, 10) if odd % 2 != 0]
print(li) # [1, 3, 5, 7, 9]
+ 세트 컴프리헨션 <Set Comprehension>
# 기존
st = set()
for 요소 in 순환가능한객체:
if 조건:
st.add(계산된요소)
# sugar🌟
st = { 계산된요소 for 요소 in 순환객체 if 조건 }
리스트 컴프리헨션과 생김새는 비슷하지만 이 친구는 {세트} 자료구조를 생성합니다.
중복된 요소를 허용하지 않는 {세트}이니 순서는 중요하지 않아도 중복된 요소가 있으면 안될 경우에 사용하면 유용할거예요
( {세트} 자료구조에 대해선 "자료구조" 코스의 [ 세트 개념 ]레슨에서 확인하실 수 있습니당🙌🙌 )
예시로 256의 약수 집합을 생성하는 방법에 대해 기존 방법과 세트 컴프리헨션을 비교해볼게용
# 기존
st = set()
for num in range(1, 257):
if 256 % num == 0:
st.add(num)
print(st) # {32, 1, 2, 64, 4, 128, 256, 8, 16}
# sugar🌟: 세트 컴프리헨션
st = {num for num in range(1, 257) if 256 % num == 0}
print(st) # {32, 1, 2, 64, 4, 128, 256, 8, 16}
+ 딕셔너리 컴프리헨션 <Dict Comprehension>
# 기존
dic = {}
for 요소 in 순환가능한객체:
if 조건:
dic[계산된요소_키] = 계산된요소_값
# sugar🌟
dic = { 계산된요소_키: 계산된요소_값 for 요소 in 순환객체 if 조건 }
이 친구 역시 다른 컴프리헨션들과 비슷한 모습이지만 사전 자료구조의 요소가 {키: 값}으로 묶인 형태이기 때문에
콜론(:)을 기준으로 '키'와 '값'을 나누어 배치해주셔야 합니당
+ 컴프리헨션을 작성할 때 if 조건문이 필요 없다면 생략할 수 있습니당
# ex). 1부터 10까지 제곱된 수를 반환하는 [리스트]
li = [ num * num for num in range(1, 11) ]
print(li) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
+ 컴프리헨션을 작성할 때 if-else 문이 필요하다면 위에서 만난 ' V. 삼항 연산자 '를 계산된요소 부분에 작성하여 표현해 줄 수 있습니당
# ex). [리스트]
# 기존
li = []
for 요소 in 순환가능한객체:
if(조건):
li.append(참_계산된요소)
else:
li.append(거짓_계산된요소)
# sugar🌟
li = [ 참_계산된요소 if 조건 else 거짓_계산된요소 for 요소 in 순환객체 ]
+ 컴프리헨션을 통해 중첩된 for문을 간결하게 표현할 수 있습니다 [ 출처 ]
# 기존
x = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
li = []
for y in x:
for z in y:
for q in z:
li.append(q)
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# sugar🌟
x = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
li = [q for y in x for z in y for q in z]
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
<https://www.codeit.kr/community/threads/19376> 출처