목록에 있는 모든 아이템을 Python과 함께 곱하려면 어떻게 해야 하나요?
숫자 목록을 가져와서 곱하는 함수를 써야 해요.예:[1,2,3,4,5,6]
나에게 줄 것이다1*2*3*4*5*6
.난 정말 너의 도움이 필요해.
Python 3: 사용functools.reduce
:
>>> from functools import reduce
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
Python 2: 사용reduce
:
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
2 및 3 용도와 호환성이 있습니다.pip install six
그 다음에, 다음과 같이 합니다.
>>> from six.moves import reduce
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
다음을 사용할 수 있습니다.
import operator
import functools
functools.reduce(operator.mul, [1,2,3,4,5,6], 1)
자세한 것은, 및 메뉴얼을 참조해 주세요.
필요한 것은import functools
Python 3+의 행.
이 경우,numpy.prod
작업을 수행합니다.이하를 참조해 주세요.
import numpy as np
mylist = [1, 2, 3, 4, 5, 6]
result = np.prod(np.array(mylist))
Import를 피하고 Python의 더 복잡한 영역을 피하고 싶다면 간단한 for 루프를 사용할 수 있습니다.
product = 1 # Don't use 0 here, otherwise, you'll get zero
# because anything times zero will be zero.
list = [1, 2, 3]
for x in list:
product *= x
시작하는Python 3.8
, 기능이 에 포함되어 있습니다.math
모듈:
math.prod(iterable, *, start=1)
메서드는 의 곱을 반환합니다.start
값(기본값: 1)에 반복 가능한 숫자를 곱한 값:
import math
math.prod([1, 2, 3, 4, 5, 6])
>>> 720
반복할 수 있는 것이 비어 있으면, 이것이 생산될 것이다.1
(또는start
값(제공된 경우)을 지정합니다.
다음은 제 기계에서 측정한 성능입니다.장기 실행 루프의 작은 입력에 대해 이 작업을 수행하는 경우 관련됩니다.
import functools, operator, timeit
import numpy as np
def multiply_numpy(iterable):
return np.prod(np.array(iterable))
def multiply_functools(iterable):
return functools.reduce(operator.mul, iterable)
def multiply_manual(iterable):
prod = 1
for x in iterable:
prod *= x
return prod
sizesToTest = [5, 10, 100, 1000, 10000, 100000]
for size in sizesToTest:
data = [1] * size
timerNumpy = timeit.Timer(lambda: multiply_numpy(data))
timerFunctools = timeit.Timer(lambda: multiply_functools(data))
timerManual = timeit.Timer(lambda: multiply_manual(data))
repeats = int(5e6 / size)
resultNumpy = timerNumpy.timeit(repeats)
resultFunctools = timerFunctools.timeit(repeats)
resultManual = timerManual.timeit(repeats)
print(f'Input size: {size:>7d} Repeats: {repeats:>8d} Numpy: {resultNumpy:.3f}, Functools: {resultFunctools:.3f}, Manual: {resultManual:.3f}')
결과:
Input size: 5 Repeats: 1000000 Numpy: 4.670, Functools: 0.586, Manual: 0.459
Input size: 10 Repeats: 500000 Numpy: 2.443, Functools: 0.401, Manual: 0.321
Input size: 100 Repeats: 50000 Numpy: 0.505, Functools: 0.220, Manual: 0.197
Input size: 1000 Repeats: 5000 Numpy: 0.303, Functools: 0.207, Manual: 0.185
Input size: 10000 Repeats: 500 Numpy: 0.265, Functools: 0.194, Manual: 0.187
Input size: 100000 Repeats: 50 Numpy: 0.266, Functools: 0.198, Manual: 0.185
Numpy는 곱셈을 수행하기 전에 배열을 할당하기 때문에 입력이 작을 때 속도가 상당히 느리다는 것을 알 수 있습니다.또한, Numpy에서 넘쳐나는 것을 조심하세요.
저는 개인적으로 일반 목록의 모든 요소를 함께 곱하는 함수를 좋아합니다.
def multiply(n):
total = 1
for i in range(0, len(n)):
total *= n[i]
print total
콤팩트하고 간단한 것(변수 및 for 루프)을 사용하여 직관적으로 느껴집니다(문제점에 대해 생각하는 것처럼 보입니다.하나를 취해서 곱하고 다음 것을 곱하는 등).
Numpy
가지고 있다prod()
목록의 곱을 반환하는 함수, 즉 이 경우 numpy이므로 지정된 축에 걸친 배열의 곱입니다.
import numpy
a = [1,2,3,4,5,6]
b = numpy.prod(a)
...그렇지 않으면 Import만 할 수 있습니다.numpy.prod()
:
from numpy import prod
a = [1,2,3,4,5,6]
b = prod(a)
간단한 방법은 다음과 같습니다.
import numpy as np
np.exp(np.log(your_array).sum())
nums = str(tuple([1,2,3]))
mul_nums = nums.replace(',','*')
print(eval(mul_nums))
오늘 이 질문을 찾았는데, 다음과 같은 경우는 없는 것 같습니다.None
는 리스트에 있습니다.따라서 완전한 솔루션은 다음과 같습니다.
from functools import reduce
a = [None, 1, 2, 3, None, 4]
print(reduce(lambda x, y: (x if x else 1) * (y if y else 1), a))
추가의 경우는, 다음과 같습니다.
print(reduce(lambda x, y: (x if x else 0) + (y if y else 0), a))
Python 3.10 One-liner 답변을 추가하고 싶습니다.
def multiply(l):
return [b := 1, [b := b * a for a in l]][-1][-1]
print(multiply([2, 3, 8, 10]))
출력:
480
설명:
[b := 1,
임시 변수를 정의하기 위한 것입니다....[b := b * a for a in l]
목록을 반복하고 곱하기 위한 것입니다.b
모든 요소에서...[-1][-1]
왜냐하면 최종 리스트는[b, [b * l[0], b * l[1], ..., b * l[-1]]]
따라서 마지막 위치에 있는 요소는 목록 내의 모든 요소의 곱입니다.
다음과 같이 부탁드립니다.
def product_list(p):
total =1 #critical step works for all list
for i in p:
total=total*i # this will ensure that each elements are multiplied by itself
return total
print product_list([2,3,4,2]) #should print 48
코드는 다음과 같습니다.
def product_list(list_of_numbers):
xxx = 1
for x in list_of_numbers:
xxx = xxx*x
return xxx
print(product_list([1,2,3,4]))
결과 : ('1*1*2*3*4', 24)
재귀를 이용하는 건 어때?
def multiply(lst):
if len(lst) > 1:
return multiply(lst[:-1])* lst[-1]
else:
return lst[0]
솔루션:
def multiply(numbers):
a = 1
for num in numbers:
a *= num
return a
''루프의 로직 사용을 이해하기 위한 유일한 간단한 방법''
랩=[2,5,7,9] 랩의 i용 x=1: x=i*x print(x)
그것은 매우 간단합니다. 아무것도 수입하지 마세요.이건 내 암호야목록 내의 모든 항목을 곱하여 해당 제품을 반환하는 함수를 정의합니다.
def myfunc(lst):
multi=1
for product in lst:
multi*=product
return product
언급URL : https://stackoverflow.com/questions/13840379/how-can-i-multiply-all-items-in-a-list-together-with-python
'programing' 카테고리의 다른 글
JavaScript 배열에서 임의 항목 가져오기 (0) | 2023.01.20 |
---|---|
자바어로 물체의 모니터는 무슨 뜻입니까?왜 이 단어를 사용하는가? (0) | 2023.01.20 |
Java에서 문자열 배열을 문자열로 변환 (0) | 2023.01.20 |
MySQL에서 false를 기본값으로 사용하여 부울 열을 생성하시겠습니까? (0) | 2023.01.10 |
MySQL - 첫 번째 문자가 소문자 또는 대문자일 경우 선택합니다. (0) | 2023.01.10 |