티스토리 뷰

for문

인자로 받은 시퀀스형 객체와 이터레이션이 가능한 객체를 순차적으로 순회한다

for문의 기본형태는 아래와 같다

for <아이템 I> in <시퀀스형 객체 S>:

구문

 ex) for문을 이용해 리스트와 사전의 각 항목을 출력

>>>ex = ['Apple', 100, 15.23]

>>>for i in ex:

print(i, type(i))

Apple <class 'str'>

100 <class 'int'>

15.23 <class 'float'>

 

>>>dic = {"apple": 100, "orange": 200, "banana": 300}

>>>for k, v in dic.items():

print(k, v)

apple 100

orange 200

banana 300

 

 

# while문

조건식이 참인 동안 반복해 내부 블록을 수행한다

조건식은 내부 블록의 구문을 수행하기전에 최초로 평가되고, 그 이후에는 매번 구문을 수행한 이후에 재평가가 이뤄져 거짓으로 평가되면 while문을 벗어난다

while <조건식>:

구문 

 ex) 5부터 1까지 출력

>>>value = 5

>>>while value > 0:

print(value)

value -= 1

5

4

3

2

1

 

 

break, continue, else

break문과 continue를 이용해 반복문을 제어할 수 있다

반복문 순회 도중 break를 만나면 반복문의 내부 블록을 벗어나고, continue를 만나면 그 이후 내부 블록을 수행하지 않고 다음 아이템을 선택해 시작지점으로 이동한다

>>>L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>>for i in L:

if i>5:

break

print("Item: {0}".format(i))

Item: 1

Item: 2

Item: 3

Item: 4

Item: 5


>>>L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>>for i in L:

if i % 2 == 0:

continue

print("Item: {0}".format(i))

Item: 1
Item: 3
Item: 5
Item: 7
Item: 9

반복문 수행 도중 break로 인해 종료되지 않고 끝까지 수행했을때 else 블록을 수행한다

>>>L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>>for i in L:

if i % 2 ==0:

continue

print("Item: {0}".format(i))

else:

print("Exit without break")

Item: 1

Item: 3

Item: 5

Item: 7

Item: 9

Exit without break

 

 

# 제어문관련 내장함수

- range(): 수열의 생성

range(['시작값'], '종료값'[, '증가값'])

종료값은 수열의 종료조건으로 필수항목이며, 생성되는 수열에 포함되지 않는다

시작값과 증가값은 선택적으로 입력할 수 있으며, 입력하지 않는 경우는 기본적으로 '시작값: 0, 증가값: 1' 이다

>>>list(range(10))

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

>>>list(range(5, 10))

[5, 6, 7, 8, 9]

>>>list(range(10, 0, -1))

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

>>>list(range(10, 20, 2))

[10, 12, 14, 16, 18]

 

- 리스트 항목과 인덱스 값을 동시에 얻는 방법

enumerate('시퀀스타입 객체'[, '시작값'=0])

첫 인자인 시퀀스타입 객체에는 이터레이션이 가능한 객체가 입력되며, 시작값은 인덱스 순번의 시작값으로 생략가능하다

실행결과는 튜플형태로 반환된다

>>>L = [100, 15.5, "Apple"]

>>>for i in enumerate(L):

print(i)

(0, 100)

(1, 15.5)

(2, 'Apple')


>>>L = [100, 15.5, "Apple"]

>>>for i, v in enumerate(L, 101):

print(i, v)

101 100

102 15.5

103 Apple

 

- 리스트 내장

<표현식> for <아이템> in <시퀀스타입 객체> (if <조건식>) 

ex) 리스트, 튜플, 사전, range() 함수에 대해 리스트 내장을 이용해 새로운 리스트 객체 만들기

>>>l = [1, 2, 3, 4, 5]

>>>[i ** 2 for i in l]

[1, 4, 9, 16, 25]

>>>t = ("apple", "banana", "orange")

>>>[len(i) for i in t]

[5, 6, 6]

>>>[ i **3 for i in range(5)]

[0, 1, 8, 27, 64]


>>>fruit=["apple", "banana", "orange", "kiwi"]

>>>[i for i in fruit if len(i) >5]

['banana', 'orange']

 

- filter 함수

리스트 내장의 if문으로 필터링하는 방법과 동일한 기능을 하는 함수

filter(<function> | None, <이터레이션이 가능한 자료형>) 

필터링할 함수 대신 None을 사용하면 원본과 동일한 내용이 출력된다

>>>L = [10, 25, 30]

>>>IterL = filter(None, L) #필터링 수행하지 않음

>>>for i in IterL:

print("Item: {0}".format(i))

Item: 10

Item: 25

Item: 30

ex) 필터링 적용

>>>def GetBiggerThan20(i):

return i>20

>>>L = [10, 25, 30]

>>>IterL = filter(GetBiggerThan20, L)

>>>for i in IterL:

print("Item:{0}".format(i))

Item: 25

Item: 30

 

- zip 함수

zip함수의 반환값인 이터레이터는 list 함수를 이용해 리스트 객체에 저장할 수 있다

zip()으로 결합된 결과를 분리하기 위해 호출할 때 결합된 객체나 이터레이터 인자앞에 * 를 사용할 수 있다

>>>X = [10, 20, 30]

>>>Y = ['A', 'B', 'C']

>>>RetList = list(zip(X, Y))

>>>RetList

[(10, 'A'), (20, 'B'), (30, 'C')]


>>>X2, Y2 = zip(*RetList)

>>>X2

(10, 20, 30)

>>>Y2

('A', 'B', 'C')

 

- map 함수

객체를 순회하며 각 아이템을 첫 인자인 함수에 전달하고, 함수의 수행결과를 이터레이터 객체로 생성해서 반환한다

map(<함수이름>, 이터레이션이 가능한 객체, ...)

리스트 객체의 모든 아이템을 10씩 증가시키는 예제

>>>L = [1, 2, 3]

>>>def Add10(i):

return i +10

>>>for i in map(Add10, L):

print("Item: {0}".format(i))

Item: 11

Item: 12

Item: 13


>>>RetList = list(map((lambda i: i+10), L)) #람다함수로 작성

>>>RetList

[11, 12, 13]

 

 

 

'Programming > Python' 카테고리의 다른 글

[Python] Dictionary  (0) 2018.08.26
[Python] List  (0) 2018.08.25
[Python] 조건문 if  (0) 2018.08.18
[Python] 주석처리  (0) 2018.08.12
[Python] python2와 python3의 차이점  (0) 2018.08.11
댓글
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday