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>      출처