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
https://deok2kim.tistory.com/95