# for
result = 1
for n in numbers:
result *= n
# while
result = 1
i = 0
while i < len(numbers):
result *= numbers[i]
i += 1
[1] 루프 사용
- 직관적이고 읽기 쉬움.
- 안전함
- 외부 모듈이 필요 없음.
- 코드가 다소 긴 편.
from functools import reduce
reduce(lambda x, y: x * y, numbers)
[2] functools.reduce
- 코드 간결.
- 외부 모듈 필요.
import math
math.prod(numbers)
[3] math.prod (Python 3.8 이상)
- 가장 간결하고 직관적. (가능하면 reduce 보다 prod 추천)
- 버전 확인 필요.
eval('*'.join(map(str, numbers)))
eval('*'.join([str(n) for n in numbers]))
[4] eval
- 코드가 짧은 편
- 보안 문제 발생 (입력값이 안전하지 않을 경우)
- 느림
# 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을, 10 이하이면 모든 원소의 곱을 return
def if_list_11(num_list):
if len(num_list) >= 11:
return sum(num_list)
else:
mul = 1
for n in num_list:
mul *= n
return mul
'''
return eval('*'.join(map(str, num_list)))
from functools import reduce
return reduce(lambda x, y: x * y, num_list)
from math import prod
def solution(num_list):
return sum(num_list) if len(num_list)>=11 else prod(num_list)
'''
'''
JS
const solution = n => n.reduce((a, v) => n.length > 10 ? a + v : a * v)
const mult = (acc, v) => acc * v;
const add = (acc, v) => acc + v;
return num_list.length > 10
? num_list.reduce(add, 0)
: num_list.reduce(mult, 1);
'''
print(if_list_11([3, 4, 5, 2, 5, 4, 6, 7, 3, 7, 2, 2, 1])) # 51
print(if_list_11([2, 3, 4, 5])) # 120
[python] int형 list 원소들의 곱
traversal : for looptime complexity : O(n)Auxiliary space : O(1)numpy.prodtime complexity : O(n)Auxiliary space : O(1)lambda w/ numpy.arraytime comple
velog.io
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
Array.prototype.reduce() - JavaScript | MDN
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
developer.mozilla.org