所以我想将列表中的所有值乘以3个不同的值,然后将所有值加起来。
List( 1, 2, 3, 4, ...)
List2(-1, 0, 1)
看起来像是
-1-2-3-4
0-2-3-4
1-2-3-4
-1+0-3-4
-1+2-3-4
-1-2+0-4
依次进行所有可能的组合,将List的每个成员与List2的成员相乘,然后将结果列表相加。 除了通过List的for循环外,我还没有任何代码。
请让我知道如何改进这篇文章。
答案 0 :(得分:0)
似乎我是第一次误解了你的问题。
您想要的东西比我最初想的要复杂一些,但这并不难。
为简单起见,我们将您的列表称为A和B;对于A中的每个值,您都有可能的大小(B);这样就可以得到size(B)^ size(A)排列。
您可以将这些排列表示为基本大小(B)数字。例如,假设B有3个元素,而A有4个元素(如您的示例所示),则可以将每个排列表示为4位以3为底的数字:0000 3 ,1000 3 ,2000 3 ,0100 3 等。
最大数量为2222 3 ,即3 4 -1
通常来说,您需要从0到base 指数 -1进行计数,并将每个整数映射到一个唯一的和,其中每个被加数对应于该整数中的一个数字:第一个是您的第一个用数字位置索引的向量,另一个用数字本身索引的第二向量。
local A = {1, 2, 3, 4}
local B = {-1, 0, 1}
local function decompose(number, base, exponent)
local sum = 0
local buf = {}
for i=1,#exponent do
local n = math.floor(number / (#base)^(i-1)) % (#base)
sum = sum + exponent[i] * base[n+1]
end
return sum
end
for i=0,(#B)^(#A)-1 do
print(i, decompose(i, B, A))
end