6. 리스트에 map 사용하기
- map은 리스트의 요소를 지정된 함수로 처리해주는 함수이다.
- map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.
list(map(함수, 리스트)) tuple(map(함수, 튜플))
- 실수가 저장된 리스트의 모든 요소를 정수로 변환하는 경우에 for 반복문을 사용하면 번거롭다.
>>> a = [1.2, 2.5, 3.7, 4.6] >>> for i in range(len(a)): # 인덱스 가져오기 ... a[i] = int(a[i]) # 가져온 인덱스로 요소 하나하나에 접근하여 int로 변환하고 다시 저장 ... >>> a [1, 2, 3, 4]
- 이럴 때 map을 사용하면 a = list(map(int, a)) 한 줄로 변환이 끝난다.
- map에 int와 리스트(a)를 넣으면 리스트의 모든 요소를 int를 사용하여 변환하고, list를 사용해서 map의 결과를 다시 리스트로 만들어준다.>>> a = [1.2, 2.5, 3.7, 4.6] >>> a = list(map(int, a)) >>> a [1, 2, 3, 4]
- map에는 리스트뿐만 아니라 range를 사용하여 모든 반복 가능한 객체를 넣을 수 있다.
- range로 0부터 9까지 숫자를 만들고 str을 이용하여 모두 문자열로 변환했고, 리스트를 출력하면 각 요소가 ' '로 묶인 것을 볼 수 있다.# range를 사용하여 숫자를 만든 뒤 숫자를 문자열로 변환 >>> a = list(map(str, range(10))) >>> a ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
6-1. input().split()과 map
- input().split()의 결과가 문자열 리스트이기 때문에 그동안 input().split()를 사용하여 값을 여러 개 입력받고 정수, 실수로 변환할 때도 map을 사용할 수 있었다.
- 이렇게 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.- 이 리스트 [10, 20]를 변수 두 개에 저장하면 지금까지 사용했던 a, b = map(int, input().split())과 같은 동작이 된다.>>> a = input().split() 10 20 (입력) >>> a ['10', '20'] # 리스트 생성
# map을 사용하여 정수로 변환 >>> a = map(int, input().split()) 10 20 (입력) >>> a <map object at 0x03DFB0D0> # map 객체 생성 >>> list(a) [10, 20]
- map이 반환하는 맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하므로 a, b = map(int, input().split()) 처럼 list를 생략한 것이다.
- a, b = map(int, input().split()) 을 풀어서 쓴 코드이다.x = input().split() # input().split()의 결과는 문자열 리스트 m = map(int, x) # 리스트의 요소를 int로 변환, 결과는 맵 객체 a, b = m # 맵 객체는 변수 여러 개에 저장할 수 있음
7. 튜플 응용하기
- 튜플은 리스트와 다르게 내용을 변경할 수 없어서 내용을 변경하는 append 같은 메서드는 사용할 수 없고, 요소의 정보를 구하는 메서드만 사용할 수 있다.
7-1. 튜플에서 특정 값의 인덱스 구하기
- index(값) 은 튜플에서 특정 값의 인덱스를 구하고, 이때 같은 값이 여러 개라면 처음 찾은(가장 작은) 인덱스를 구한다.
>>> a = (38, 21, 53, 62, 19, 53) >>> a.index(53) 2 # 처음 찾은(가장 작은) 인덱스
7-2. 특정 값의 개수 구하기
- count(값) 은 튜플에서 특정 값의 개수를 구한다.
>>> a = (10, 20, 30, 15, 20, 40) >>> a.count(20) 2 # 20의 개수
7-3. for 반복문으로 요소 출력하기
- for 반복문을 이용하여 요소를 모두 출력할 수 있다.
>>> a = (38, 21, 53, 62, 19) >>> for i in a: ... print(i, end=' ') ... 38 21 53 62 19
7-4. 튜플 표현식 사용하기
- 튜플을 리스트 표현식처럼 생성할 때는 tuple 안에 for 반복문과 if 조건문을 지정한다.
# tuple(식 for 변수 in 리스트 if 조건식) >>> a = tuple(i for i in range(10) if i % 2 == 0) >>> a # 0~9까지의 숫자중 2의 배수들 (0, 2, 4, 6, 8)
- 이때 ( ) 안에 표현식을 넣으면 튜플이 아닌 제너레이터 표현식이 된다.
# 제너레이터 표현식 >>> (i for i in range(10) if i % 2 == 0) <generator object <genexpr> at 0x050FE420>
7-5. tuple에 map 사용하기
- 튜플에 map을 사용하는 방법은 리스트와 동일하다.
>>> a = (1.2, 2.5, 3.7, 4.6) >>> a = tuple(map(int, a)) >>> a (1, 2, 3, 4)
7-6. 튜플에서 가장 작은 수, 가장 큰 수, 합계 구하기
- 튜플도 min, max 함수로 가장 작은 수와 가장 큰 수를 구하고 sum 함수로 요소의 합계를 구할 수 있다.
>>> a = (38, 21, 53, 62, 19) >>> min(a) 19 >>> max(a) 62 >>> sum(a) 193
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 23 정리(2) - 2차원 리스트에서의 반복문 사용 (0) | 2022.01.25 |
---|---|
파이썬 코딩도장 Unit 23 정리(1) - 2차원 리스트 생성 후 요소에 접근하기 (0) | 2022.01.24 |
파이썬 코딩도장 Unit 22 정리(4) - 리스트 표현식 사용 (0) | 2022.01.21 |
파이썬 코딩도장 Unit 22 정리(3) - 리스트(튜플)의 최대/최소값, 합계 (0) | 2022.01.20 |
파이썬 코딩도장 Unit 22 정리(2) : 리스트 (0) | 2022.01.19 |