return next(sum(numbers[:i + 1]) for i in range(len(numbers)) if sum(numbers[:i + 1]) > n)
next(조건, 기본값)
- 조건에 맞는 가장 첫번째 값을 반환함.
- 조건에 반복자(iter) 를 넣으면 for 문처럼 사용할 수 있음.
from itertools import accumulate
def find_first_exceeding_sum(numbers, n):
return next((s for s in accumulate(numbers) if s > n), None)
accumulate(리스트)
- 리스트의 값의 누적합을 리스트로 반환함.
- sum 의 반복 호출을 피할 수 있음.
- for 문으로 + 연산을 반복하는 것보다 훨씬 빠른 속도로 연산 가능.
# 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 리턴
def add_num(numbers, n):
answer = 0
for num in numbers:
answer += num
if answer > n:
return answer
'''
return next(sum(numbers[:i + 1]) for i in range(len(numbers)) if sum(numbers[:i + 1]) > n)
from itertools import accumulate
def find_first_exceeding_sum(numbers, n):
return next((s for s in accumulate(numbers) if s > n), None)
'''
print(add_num([34, 5, 71, 29, 100, 34], 123)) # 139
print(add_num([58, 44, 27, 10, 100], 139)) # 239
https://dojang.io/mod/page/view.php?id=2408
파이썬 코딩 도장: 39.4 iter, next 함수 활용하기
이번에는 파이썬 내장 함수 iter, next에 대해 알아보겠습니다. iter는 객체의 __iter__ 메서드를 호출해주고, next는 객체의 __next__ 메서드를 호출해줍니다. 그럼 range(3)에 iter와 next를 사용해보겠습니
dojang.io
https://deok2kim.tistory.com/95
[python] accumulate(itertools), 누적 합
📗 accumulate 뜻으로는 축적하다? 한마디로 누적된 합을 뽑아주는 녀석 🔵 사용법 from itertools import accumulate a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] b = list(accumulate(a)) print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(b) # [
deok2kim.tistory.com