lua - 创建一个组合列表?Lua/伪代码
问题描述
所以我想将列表中的所有值乘以 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 循环外,我还没有代码。
请让我知道如何改进这篇文章。
解决方案
看来我第一次误解了你的问题。
你想要的比我最初想象的要复杂一些,但也不是太难。
为简单起见,我们将您的列表称为 A 和 B;对于 A 中的每个值,您都有 size(B) 可能的因素;所以你得到 size(B)^size(A) 排列。
您可以将这些排列表示为 base-size(B) 数字。例如,假设 B 有 3 个元素,A 有 4 个(如您的示例所示),那么您可以将每个排列表示为 4 位基数为 3 的数字: 0000 3、 1000 3、 2000 3、 0100 3等。
最大的数是 2222 3,即 3 4 -1
一般来说,您需要从 0 计数到基指数-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
推荐阅读
- python - 使用字符串的动态函数 - python
- node.js - 通过 Node.js API 删除 Big Query 中的表,并获取 ENOENT: no such file or directory
- javascript - 数组拼接在函数内部没有按预期工作
- c# - 使用具有复杂属性名称的 system.text.json 在 C# 中反序列化 JSON
- django - Django Queryset 获取对象序列而不是 Sum 的结果
- python - 在熊猫中重塑数据透视表
- regex - 或没有在记事本++中捕获正则表达式
- sql - 在快速插入和更新 1 条记录后锁定表
- java - Spring security:我如何在登录后点击链接而不去主页
- angular - Angular 材质、自动完成加载指示器和显示文本(未找到结果)