상세 컨텐츠

본문 제목

[PYTHON] map, iterable

Python

by ollive 2024. 7. 17. 17:03

본문

파이썬 14 약수의 합

def solution(n):
    answer = 0
    for i in range(1, n+1):
        if n % i == 0:
            answer += i    
    return answer

 

파이썬 15 나머지가 1이 되는 수 찾기

def solution(n):
    answer = 0
    for i in range(1, n):
      answer = i-1
      if n % i == 1 and answer < i:
        return i

파이썬 16 x만큼 간격이 있는 n개의 숫자

def solution(x, n):
    answer = []
    ns = 0
    for i in range(n):
        ns = x+x*i
        answer.append(ns)
    return answer

 

파이썬 17 자연수 뒤집어 배열로 만들 : map

def solution(n):

--풀이 1
	answer = []
    while n > 0 :
    answer.append(n % 10)		#n의 마지막 자리수를 추가하고 
    n = n //10				#n의 마지막 자리수를 제외한 n을 탄생
    return answer
    
--풀이 2
 	return list(map(int, reversed(str(n))))  # map을 이용해 iterable한 문자n을 각각 int로 변환
                                             # list로 반환
    
--풀이 3
	return [int(i) for i in str(n)][::-1]    # 문자n을 하나씩 정수로 바꾸어 리스트에 넣기
                                             # 리스트 역순으로 뒤집기

 

  • map
    • 여러 데이터를 한번에 다른 형태로 변환하는 내장함수
    • map(function, iterable) : 순회가능한 데이터에 변환 함수를 적용해서 반환한다.
      • iterable의 각 요소를 인자로 받아서 처리하며, 반환된 값은 iterator의 요소가 된다.
    • map함수의 결과는 map타입의 iterator 객체를 결과로 반환한다.
      • list(map())나 tuple(map())을 사용하여 형변환을 시킬 수 있다.
  • 반복 가능한 객체 = 순회 가능한 데이터(iterable)
    • 이터레이터(iterator)는 값을 차례대로 꺼낼 수 있는 객체(object)
    • iterableiterator는 구분된다.
    • 문자열, 리스트, 딕셔너리, 세트, range() 처럼 값이 여러 개가 들어있고 하나씩 꺼낼 수 있어야한다.
    • dir()함수를 사용하여 이터레이터인지 확인 가능하다.
      1. 객체에 __iter__ 메서드가 들어있다면, 이터레이터이다.
      2.  __nest__메서드를 호출하여 차례대로 값을 꺼낼 수 있다
      3. 모두 꺼내면  StopIteration을 발생되며 반복이 끝난다.
dir([12,2])       # 출력의 4번째 줄 가운데에서 '__iter__'을 확인할 수 있다. 따라서 이터레이터이다.

#출력
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', 
'__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', 
'__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', 
'__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index',
'insert', 'pop', 'remove', 'reverse', 'sort']

dir([12,2]).__iter__()   # 리스트에서 이터레이터를 호출 할 수 있다. 
                         # 결과 : <list_iterator at 0x7f45798289a0>
iter = [12,2].__iter__()
iter.__next__()                   # 출력 : 12
iter.__next__()                   # 출력 : 2
iter.__next__()                   # 출력 : StopIteration

StopIteration 발생

 

  • map 사용의 이점
    • map을 사용하면 불필요한 연산을 최소화시켜 성능을 향상 시킬 수 있다. 모든 값을 계산하는 것이 아닌 부분만 처리할 수 있기 때문에 불필요한 메모리 사용을 줄일 수 있다.
    • 반복문을 작성하지 않아도 되므로 코드가 간결해지며 가독성이 좋아진다.
    • 내부적으로 C를 사용하여 구현하므로 반복문보다 빠른 처리가 가능하다.

 

참고 : https://dojang.io/mod/page/view.php?id=2405

https://dotiromoook.tistory.com/28

 

파이썬 18 문자열을 정수로 바꾸기

def solution(s):
    return int(s)

 

파이썬 19 정수 제곱근 판별

def solution(n):
    answer = -1
    for x in range(1,n+1):
        if x*x == n:
            answer = (x+1)*(x+1) 
            break                         #브레이크를 사용하여 시간을 줄여주었다.
    return answer

 

관련글 더보기