我非常快地完成了此功能,以找到列表中所有内容的组合力量,但是我敢肯定,有一种方法可以使其更快。它返回一个2项列表,合并后的能力和列表格式用于导出。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="box"></div>
<button id="anim-left"> Animate To Left </button>
<button id="anim-right"> Animate To Right </button>
答案 0 :(得分:2)
这将比您当前拥有的更快地计算值:
import functools
import operator
l = [2, 3, 4]
functools.reduce(operator.pow, l)
## 4096
如果您也想在列表中显示值链,就像在原始帖子中一样,您可以定义一个函数,例如像这样一个:
def func(vals):
vals_string = '^'.join(str(val) for val in vals)
total = functools.reduce(operator.pow, vals)
return [total, vals_string]
用法示例:
l = [2, 3, 4, 5]
result = func(l)
print(result)
## [1152921504606846976, '2^3^4^5']
答案 1 :(得分:1)
您要避免进行一堆幂运算,因为它们很昂贵。乘法比较便宜,因此您可以通过将第一个值右边的所有值相乘,然后将第一个值提高到该幂来节省计算能力。
from functools import reduce
from operator import mul
from typing import List
def find(x: List[int]) -> int:
return x[0]**reduce(mul, x[1:], 1)
您也可以这样做
def find(i: int, *updog: int) -> int:
return i ** reduce(mul, updog, 1)
并像find(*[2,1,2,3,4])
或find(2, 1, 2, 3)
这样称呼它。
无论哪种方式,它都使用函数签名来提供对设置初始值的更严格保证,而不是在列表为空的情况下具有未定义的行为。
答案 2 :(得分:0)
您可以使用NumPy的power.accumulate()
获得累积指数。 但是,您很快就会遇到大量输入列表的问题。 [-1]
在这里为您提供了所有元素的累积
import numpy as np
def find(x):
total = np.power.accumulate(x)[-1]
value = [total,'^'.join(map(str, inp))]
return value
x = np.array([2,3,4,5])
print (find(x))
# [1152921504606846976, '2^3^4^5']
答案 3 :(得分:0)
您可以使用functools.reduce()
:
from functools import reduce
import operator
reduce(operator.pow, list)
reduce()
的作用是将第一个参数应用于第二个元素中的每个元素。