본문 바로가기
python/문법

[python] [문법] for문 간단하게 쓰기

by 설화님 2024. 1. 20.

[python] [문법] for문 간단하게 쓰기

 

바로 리스트 내에서 for문을 선언하는 방법입니다. 리스트 컴프리헨션(Comprehension)이라고 불리웁니다. 

 

먼저 리스트 컴프리헨션을 사용하지 않는 기존의 방법으로 예시를 들어 보겠습니다.

 

1
2
3
= []
for x in range(05):
    a.append(x)
cs

 

생성한 리스트에 0부터 4까지 for문으로 넣는 소스코드입니다.

 

우리가 흔히 알고있는 정석대로 코딩을 했는데 이것보다 더 간단하게 사용할 수 있다고 해서 저도 흠칫했습니다.

 

1
= [x for x in range(05)]
cs

 

이게 끝입니다. 

 

어떻게 들어간건지 간단하게 설명부터 드리자면 for문 앞에 x 가 반복문의 변수 선언을 의미하고  그 뒤부터는 우리가 알고 있는 for의 문법과 같습니다.

 

결과를 출력을 하면 

 

 

출처: https://redmuffler.tistory.com/452 [날개짓은 지금부터:티스토리]

 

1. for문

- 1차원 list의 각 원소를 한 줄로 출력하기

 

v = list(range(10))
print(v)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

① 기존

 

for i in v:
    print(i)

 

② 한 줄로

 

[i for i in v]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

물론 도 for i in v : print(i) 와 같이 코딩한다면 한 줄로 코딩 할 수 있으나, 코드가 더 길어질 경우 가 훨씬 깔끔하게 짤 수 있으며, 출력의 형태도 다르다.

에서 출력되는 i의 type은 int형이며, 에서 출력되는 type은 list이다.

 

※ 출력

~.join()으로 좀 더 예쁘게 출력할 수 있다.

 

print(" ".join(str(i) for i in v))

0 1 2 3 4 5 6 7 8 9


- 2차원 list의 각 원소를 한 줄로 출력하기

 

v = [list(range(10)),[10,11,12]]
print(v)

[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12]]

 

 

① 기존

 

for i in v:
    for j in i:
        print(j)

 

② 한 줄로

 

[j for i in v for j in i]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

 


2. if문

- one condition

 

① 기존

 

if v<5 :
    print(0)

 

② 한 줄로_방법1

 

v = 3
if v<5 : print(0)

'0'

 

② 한 줄로_방법2

 

v = 3
print(0 if v<5 else 1)

'0'

 

v = 8
print(0 if v<5 else 1)

'1'


- more than one condition

 

① 기존

 

if v<5 :
    print(0)
elif v<10:
    print(1)
else :
    print(2)

 

② 한 줄로

 

v = 3
print(0 if v<5 else 1 if v<10 else 2)

'0'

 

v = 8
print(0 if v<5 else 1 if v<10 else 2)

'1'

 

v = 10
print(0 if v<5 else 1 if v<10 else 2)

'2'


3. for문 + if문

- if condition에 해당하는 값만 출력하기

 

v = list(range(10,20))
print(v)

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

 

 

① 기존

 

for i in v:
    if i==12:
        print(i)

12

 

 

② 한 줄로

 

[i for i in v if i==12]

[12]


- for문에 해당하는 각각의 원소가 if condition에 해당하는지, 아닌지

 

① 기존

 

for i in v:
    if i==12:
        print(i)
    else :
        print("No")

 

② 한 줄로

 

[i if i==12 else "No" for i in v ]

['No', 'No', 12, 'No', 'No', 'No', 'No', 'No', 'No', 'No']

출처: https://leedakyeong.tistory.com/entry/python-for문-if문-한-줄로-코딩하기 [슈퍼짱짱:티스토리]

 

 

 

 

for i in range (9): print('come') for i in range (9): print('what') 이 코드에서 i 가 똑같은데 문제 없어?
 
ChatGPT
ChatGPT

이 코드에서 외부 루프와 내부 루프에서 모두 변수 i를 사용하고 있습니다. 이 경우 외부 루프의 i와 내부 루프의 i는 서로 영향을 주지 않습니다. 외부 루프의 i 값이 내부 루프에 영향을 미치지 않습니다.

다른 단어로 표현하면, 내부 루프에서의 i는 외부 루프에서의 i와는 독립적으로 동작합니다. 이것은 파이썬의 스코프 규칙에 따라서 지역 변수의 개념이 적용되기 때문입니다.

따라서 문제 없이 동작할 것입니다. 다만 코드를 읽기 쉽게 만들기 위해서는 외부 루프와 내부 루프에서 서로 다른 변수명을 사용하는 것이 좋습니다.