gpt4 book ai didi

list - 对于列表的列表,将每个列表的每个元素与每个其他列表的每个其他元素组合

转载 作者:行者123 更新时间:2023-12-02 17:54:41 32 4
gpt4 key购买 nike

我需要一个函数,它将获取(项目列表)列表,并枚举每个列表中每个项目的所有可能组合。所以

someCombo :: [[a]] -> [[a]]
someCombo = undefined

如果我有这样的东西

[ 
[a1,b1],
[a2,b2,c2],
[a3,b3]
]

我想吐出这样的答案,其中每个列表的每个元素都与每个其他列表的每个元素匹配。大概在这种情况下,最终列表中有 12 个元素。

[
[a1,a2,a3],[a1,a2,b3],[a1,b2,a3],[a1,b2,b3],...,[b1,c2,b3]
]

主参数中可以有任意数量的列表。这看起来应该很简单,但我无法完全理解它。我可以对两个或三个列表执行此操作,但无法使其递归地处理任意数量的列表。哦,我不关心结果列表的顺序,只要我拥有全部 12 个(或其他)即可。

如果有人好奇这是做什么的,这是我需要实现的最后一 block 算法,该算法确定在每次举重之前将杠铃片放在杠铃上的顺序,从而最大限度地减少我在锻炼中进行的杠铃片洗牌量练习。我想这可能会为我每次锻炼节省几分钟。为了做到这一点,我需要枚举所有可能的锻炼,其中涉及每次举重的一组特定板 block ,然后找到每个举重的板 block 顺序组合,从而导致最少的洗牌量。

最佳答案

import Control.Monad

someCombo = sequence

让我们尝试一下:

>>> someCombo [[1, 2], [3, 4]]
[[1,3],[1,4],[2,3],[2,4]]

要理解这一点,您需要理解列表推导式或列表单子(monad)。 sequence 有效地做到了这一点:

sequence [[1, 2], [3, 4]]
= do x <- [1, 2]
y <- [3, 4]
return [x, y]

您可以将其视为“让 x 范围超过 1 和 2,让 y 范围超过 3 和 4,现在返回 x 的所有排列y”。

关于list - 对于列表的列表,将每个列表的每个元素与每个其他列表的每个其他元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14471876/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com