안녕하세요!
python 제어문 - for , list 안의 for문 본문
제어문 for
- 횟수 반복문
- 가장 많이 쓰임.
- 리스트/튜풀/문자열의 요소의 개수만큼 반복한다.
- for 변수 in 리스트/튜플/문자열: 실행문1…
ls = [1, 2, 3, 4, 5]
for i in ls:
print(i)
1
2
3
4
5
java에서의 for문과 다르게 i에 ls를 직접 뽑아내서 쓰는방식으로 이해했다. 나와있는 i라는 변수는 내가 주고싶은 아무 변수나 줘도 사용 가능한점이 있으나, i를 통상적으로 사용하는 듯 했다.
print(ls[0])
print(ls[1])
print(ls[2])
print(ls[3])
print(ls[4])
위의 print 결과와 같은 결과가 나온다.
(두가지 표현 방법을 살펴 볼 수 있었다.)
for i in range(0, 10):
print(i)
0
1
2
...
8
9
앞에서 언급했듯, java는 i++ 이나 직접적으로 범위를 지정해줬다면, python의 경우는 range로 범위를 정해주는 방식을 가장 많이 사용한다고 말씀하셨다.
#별로 좋지 않은 방법.
for i in range(len(ls)):
print(ls[i])
0
1
2
3
4
앞에서 언급한 것처럼, range로 범위를 주면 알아보기 쉽지만 해당 방법으로 사용하게되면 알아보기 어려워지므로 웬만하면 range에 범위를 줘서 사용하도록 하자.
a = ['a', 'b', 'c']
for i in a:
print(i)
a
b
c
a라는 리스트의 index들을 뽑아낼때도 사용이 가능한 점을 인지하자.
for jjajang in range(1,11):
print(f'짜장면을 {jjajang}그릇 먹었다.')
print('무료 쿠폰을 받았습니다.')
짜장면을 1그릇 먹었다.
짜장면을 2그릇 먹었다.
짜장면을 3그릇 먹었다.
짜장면을 4그릇 먹었다.
짜장면을 5그릇 먹었다.
짜장면을 6그릇 먹었다.
짜장면을 7그릇 먹었다.
짜장면을 8그릇 먹었다.
짜장면을 9그릇 먹었다.
짜장면을 10그릇 먹었다.
무료쿠폰을 받았습니다.
* 앞에서 먹었던 짬뽕의 짜장버전이다.
while문 대신 for문으로 표현이 가능하다.(당연한소리)
while문에서 그랫듯,
continue, break, pass
- continue : 해당 조건에서 그 루프가 끝나고 다음 루프로 넘어간다.
- pass : 실행할 코드가 없는 건을 뜻함.(모두 다 실행하고 다음 루프로 넘어간다.)
- break : 반복문 자체를 중단한다.
해당 세가지 continue, break, pass 모두 사용이 가능하다.
#리스트에서 for 사용하기
ls = [] #예전 표기법
# ls = list() #요즘 표기법
for i in range(1,51):
if i % 5 == 0:
ls.append(i)
print(ls)
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
리스트를 이용하여 for문을 작성하면 이런식으로 걸러서 결과를 도출 할 수 있다.
#딕셔너리에서 for 사용하기 json.org 에서 사용법 확인 가능.
dic = [{ 'name' :'Merry',
'num' : '1',
'birth' :'jan'},
{'name' :'jane',
'num' : '2',
'birth' :'feb'},
{'name' :'kane',
'num' : '3',
'birth' :'march'}
]
print(dic)
[{'name': 'Merry', 'num': '1', 'birth': 'jan'},
{'name': 'jane', 'num': '2', 'birth': 'feb'},
{'name': 'kane', 'num': '3', 'birth': 'march'}]
마찬가지로 dictionary에서도 사용이 가능하다.
#2중 for문으로 구구단 뽑기
for i in range(2,10):
for j in range(1, 10):
print(i * j, end= ' ')
print()
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
i의 range가 2~9. i의 range가 1~9
i와 j를 곱하므로, 2 * 1 2 * 2 2* 3 ... 9*8 9*9 를 반복하므로 구구단이 나온다.
print를 두번 한 이유는 정렬이 깔끔하게 되기때문!(첫 print에 end로 칸을 주고, 뒤의 print에서 2~9까지 반복을 프린트해서 맨 앞으로 가져와서 그런게 아닐까..)
List Comprehension (list 내 for문)
- 리스트 안에 for문을 포함하여 한줄!!로 편하게 코드 작성하는 문법.
- [표현식 for 항목 in 반복가능객체 if 조건문]
- 뒤에서 앞으로 소스를 읽을면 좀 편하게 이해가능하다.
ls = list()
for i in range(1,5):
ls.append(i)
print(ls)
[1, 2, 3, 4]
이것을 list안의 for문으로 바꿔 표현한다면?
ls = [i for i in range(1,5)]
print(ls)
[1, 2, 3, 4]
이런식으로 이해를 했다.
(또 다른 예시.)
리스트 내의 for문은 짧게 한줄로 줄여서 가능하지만.. 아직은 익숙하지 않아서 이해에 어려움이 있어서.. 더 연습해봐야겠다.
print(ls)
#%%
# [표현식 for 항목1 in 반복가능객체 if 조건문 1 for 항목2 in 반복가능객체 if 조건문2 ...]
gugudan = list()
for i in range(2,10):
for j in range(1,10):
gugudan.append(i*j)
print(gugudan)
||
gugudan = [i * j for i in range(2,10) for j in range(1,10)]
print (gugudan)
[2, 4, 6, 8, 10,..., 72, 81]
list안의 for문의 2중 for문을 예시로 들자면 이렇게 가능하다.(그림은 생략)
#dictionary내의 for문
# Dict comprehension
①
names = ['Merry' , 'john' , 'Chris']
num = [1, 2, 3]
dic = {names[i]:num[i] for i in range(len(names))}
print(dic)
②
dic = {k:v for k, v in zip(names,num)} #names[i]:num[i] 이걸 묶어 놓은 것이다.
print(dic)
||
③
dic1 = dict()
for k, v in list(zip(names,num)):
dic1[k] = v
print(dic1)
{'Merry': 1, 'john': 2, 'Chris': 3}
아직은 복잡해서 제대로 이해했나 싶지만, 1번은 2,3번에 비해 변수가 하나만 사용되므로 변수가 외부에서 사용되거나 중복되는 무언가가 있을때 위험해지므로 2번이나 3번을 사용한다. 2번은 zip으로 (names와num)을 묶어준것을 k와v로 unpack하면서 결과값을 따로 도출 해낸다. 3번또한 k, v 로 key value를 지정하고 list를 zip으로 묶어서 dic1[k] = v로 결과값을 도출한다.
오늘은 이 수업을 한 뒤, 고객관리 관련하여 페어프로그래밍을 해 보았다.
페어프로그래밍은 다음 글에 올리도록 하겠다!
'개발일지 > python' 카테고리의 다른 글
Python 함수(define) 간단 정리! pickle 간단 사용법 (2) | 2023.11.07 |
---|---|
페어 프로그래밍(고객관리프로그램) python (0) | 2023.11.07 |
python 제어문 - 반복문 간단 정리! (0) | 2023.11.05 |
Python set(집합), boolean(불리언) (0) | 2023.11.05 |
Python (list, tuple, dictionary) 간단 정리! (0) | 2023.11.03 |