gpt4 book ai didi

list-comprehension - Julia 中所有可能长度的所有组合

转载 作者:行者123 更新时间:2023-12-03 23:41:13 26 4
gpt4 key购买 nike

例如,给定输入 n = 3 我想获得:

[(1,),(2,),(3,),(1,2),(1,3),(2,3),(1,2,3)]         

我尝试了类似 python 的语法:

combs = [comb for x in collect(1:n) for comb in combinations(collect(1:n),x)]

但我收到以下错误信息:

ERROR: LoadError: syntax: expected ]

我也试过这个:

combs = [comb for comb in vcat([combinations(collect(1:n),x) for x in collect(1:n)])]

但是我得到了:

[Base.Combinations{Array{Int64,1}}([1,2,3],1),Base.Combinations{Array{Int64,1}}([1,2,3],2),Base.Combinations{Array{Int64,1}}([1,2,3],3)]

如何得到我想要的结果?

最佳答案

n = 3
vcat([collect(combinations(1:n,i)) for i=1:n]...)

好吗?

输出:

7-element Array{Array{Int64,1},1}:
[1]
[2]
[3]
[1,2]
[1,3]
[2,3]
[1,2,3]

其他方法:

另一种方法是 [65-findin(bits(i),'1') for i=1:(2^n-1)],它指出了一种非常有效的实现方式沿着:

tmp = BitVector(sizeof(Int)*8)
[begin tmp.chunks[1]=i; find(tmp) end for i=1:(2^n-1)]

虽然它使用了 BitVector 内部结构,但可能并不那么明显。

为了内存效率:

using Iterators
chain(([combinations(1:n,i) for i=1:n])...) |> collect

(可以直接用作 for 循环中的迭代器)。但是使用 Iterators 可以使用:

drop(subsets(1:n),1) |> collect

这是可读的。

关于list-comprehension - Julia 中所有可能长度的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397995/

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