제어문과 연관된 유용한 함수
range() - 수열의 생성
range( ['시작값'], '종료값'[, '증가값'])
-
‘종료값’은 수열의 종료조건으로 필수 항목이며, 생성되는 수열에 포함되지 않는다.
-
‘시작값’과 ‘증가값’은 선택적으로 입력 가능 !
-
입력하지 않으면 Default : ‘시작값’은 0, ‘증가값’은 1이다.
-
range() 함수를 수행하면 이터레이션이 가능한 객체가 반환된다.
>>> list(range(10)) # 종료값만 있는 경우 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부터 20까지 짝수 출력
[10, 12, 14, 16, 18]
- range() 함수를 이용해 10에서 20까지 짝수를 출력하는 예제 코드
>>> for i in range(10,20,2):
... print(i)
10
12
14
16
18
리스트 항목과 인덱스 값을 동시에 얻는 법
enumerate('시퀀스 타입 객체'[, '시작값' = 0])
-
첫 인자인 ‘시퀀스 타입 객체’에는 시퀀스형 객체, 즉 이터레이션이 가능한 객체가 입력된다.
-
‘시작값’은 인덱스 순번의 시작값으로 생략 가능 !
생략시 0부터 시작. -
함수를 실행하고 나면 튜플 형태로 (인덱스, 시퀀스 객체의 아이템)이 반환된다.
>>> L = [100, 15.5, "Apple"]
>>> for i in enumerate(L):
... print(i)
...
(0, 100)
(1, 15.5)
(2, 'Apple')
>>> for aa in enumerate(L): ## i가 아닌 다른 변수명을 사용해도 된다 !
... print(aa)
...
(0, 100)
(1, 15.5)
(2, 'Apple')
>>> for i, v in enumerate(L, 101):
... print(i, v)
...
101 100
102 15.5
103 Apple
리스트 내장
<표현식> for <아이템> in <시퀀스 타입 객체> (if <조건식>)
-
기존의 리스트 객체를 이용해 조합, 필터링 등의 추가적인 연산을 통해 새로운 리스트 객체를 생성하는 경우
리스트 내장(List Comprehensions)
은 매우 효율적이다. -
시퀀스 타입객체
에는 시퀀스형 객체(리스트, 튜플, 셋) or 이터레이션이 가능한 객체가 들어간다. -
아이템
은 리스트 객체의 개별 아이템 -
표현식
은 개별아이템
을 사용해사상 함수(mapping)
형태로 새로운 리스트 객체를 생성하는데 사용한다. -
if 조건식
은 조건식에 맞는 원본 리스트의 아이템을 선별하는 데 사용되며 생략 가능하다.
>>> 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]
>>> d = {100:"apple", 200:"banana", 300:"orange"} # 사전 객체
>>> [v.upper() for v in d.values()] # 사전의 문자열을 대문자로 변환
['APPLE', 'BANANA', 'ORANGE']
>>> [i ** 3 for i in range(5)] # range()함수를 사용하여 수열 생성
[0, 1, 8, 27, 64]
- “if <조건식>"을 이용하면 다양한 조건을 만족하는 아이템만을 원본 리스트 객체에서 뽑아낼 수 있다.조건식>
>>> l = ["apple", "banana", "orange", "kiwi"]
>>> [i for i in l if len(i) > 5] # 원본 리스트에서 문자열 길이가 5를 초과하는 아이템만 출력
['banana', 'orange']
-
원본 리스트가 2개 이상의 다수인 경우에도
리스트 내장을 이용해 각 리스트의 조합을 만들어 낼 수 있다.
>>> L_1 = [3,4,5]
>>> L_2 = [1.5, -0.5, 4]
>>> [ x*y for x in L_1 for y in L_2]
[4.5, -1.5, 12, 6.0, -2.0, 16, 7.5, -2.5, 20]
- 위와 같은 경우, L_1 리스트의 모든 인자가 L_2의 모든 인자와 조합되는 것을 알 수 있다.