Julia 在可变数量的列表上使用Iterators.product

Julia 在可变数量的列表上使用Iterators.product,julia,Julia,我正在尝试创建一个函数,该函数在可变数量的数组上使用迭代器.product()。 这是我的代码: function make_feature_space(dictionary, k) dict_chars = collect(dictionary) #Change bottom line dict_product = collect(Iterators.product(dict_chars)) return dict_product end 我想要的行为是调用m

我正在尝试创建一个函数,该函数在可变数量的数组上使用迭代器.product()。 这是我的代码:

function make_feature_space(dictionary, k)
    dict_chars = collect(dictionary)
    #Change bottom line
    dict_product = collect(Iterators.product(dict_chars))
    return dict_product
end
我想要的行为是调用
make\u feature\u space(dictionary,3)
将返回
迭代器。product(dict\u chars,dict\u chars,dict\u chars)
,但是调用
make\u feature\u space(dictionary,2)
将得到
迭代器。product(dict\u chars,dict\u chars)

谢谢

这是一个使用和的解决方案:

这就是它的作用:

julia>x=1:2;
julia>生成特征空间(x,2)|>收集
2×2数组{Tuple{Int64,Int64},2}:
(1, 1)  (1, 2)
(2, 1)  (2, 2)
julia>生成特征空间(x,3)|>收集
2×2×2数组{Tuple{Int64,Int64,Int64},3}:
[:, :, 1] =
(1, 1, 1)  (1, 2, 1)
(2, 1, 1)  (2, 2, 1)
[:, :, 2] =
(1, 1, 2)  (1, 2, 2)
(2, 1, 2)  (2, 2, 2)
请注意,此实现可以在
make\u feature\u space
的第一个参数中使用任何迭代器。进一步注意,字典是成对的迭代器,因此可以执行以下操作:

julia>d=Dict(:a=>1,:b=>2)
Dict{Symbol,Int64}有2个条目:
:a=>1
:b=>2
julia>生成特征空间(d,2)|>收集
2×2数组{Tuple{Pair{Symbol,Int64},Pair{Symbol,Int64},2}:
(:a=>1,:a=>1)(:a=>1,:b=>2)
(:b=>2,:a=>1)(:b=>2,:b=>2)
虽然你的问题不清楚你是在寻找一个产品而不是字典中的键、值或对

using Base.Iterators

make_feature_space(x, n) = product(repeated(x, n)...)