본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 22 정리(6) - 리스트에 map 사용, 튜플 응용

by chanfficial 2022. 1. 23.

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)) 한 줄로 변환이 끝난다.
    >>> a = [1.2, 2.5, 3.7, 4.6]
    >>> a = list(map(int, a))
    >>> a
    [1, 2, 3, 4]​
    - map에 int와 리스트(a)를 넣으면 리스트의 모든 요소를 int를 사용하여 변환하고, list를 사용해서 map의 결과를 다시 리스트로 만들어준다.
  • map에는 리스트뿐만 아니라 range를 사용하여 모든 반복 가능한 객체를 넣을 수 있다.
    # range를 사용하여 숫자를 만든 뒤 숫자를 문자열로 변환
    >>> a = list(map(str, range(10)))
    >>> a
    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']​
    - range로 0부터 9까지 숫자를 만들고 str을 이용하여 모두 문자열로 변환했고, 리스트를 출력하면 각 요소가 ' '로 묶인 것을 볼 수 있다.

 

6-1. input().split()과 map

  • input().split()의 결과가 문자열 리스트이기 때문에 그동안 input().split()를 사용하여 값을 여러 개 입력받고 정수, 실수로 변환할 때도 map을 사용할 수 있었다.
    >>> a = input().split()
    10 20 (입력)
    >>> a
    ['10', '20'] # 리스트 생성
    - 이렇게 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.- 이 리스트 [10, 20]를 변수 두 개에 저장하면 지금까지 사용했던 a, b = map(int, input().split())과 같은 동작이 된다.
  • # 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를 생략한 것이다.
    x = input().split() # input().split()의 결과는 문자열 리스트
    m = map(int, x)     # 리스트의 요소를 int로 변환, 결과는 맵 객체
    a, b = m            # 맵 객체는 변수 여러 개에 저장할 수 있음​
    - a, b = map(int, input().split()) 을 풀어서 쓴 코드이다.

 

 

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​