代码之家  ›  专栏  ›  技术社区  ›  dukereg

在Julia中迭代所有可能性

  •  2
  • dukereg  · 技术社区  · 5 年前

    如果我想对每一对字母做点什么,在Julia中可能会是这样:

    for l1 in 'a':'z'
        for l2 in 'a':'z'
            w = l1*l2
            # ... do something with w ...
        end
    end
    

    我想把它概括为任何长度的单词,给定一个值 n 指定所需的字母数。我在茱莉亚最好怎么做?

    1 回复  |  直到 5 年前
        1
  •  5
  •   Bogumił Kamiński    5 年前

    你可以使用:

    for ls in Iterators.product(fill('a':'z', n)...))
        w = join(ls)
        # ... do something with w ...
    end
    

    特别是,如果您想将它们收集到一个数组中,您可以编写:

    join.(Iterators.product(fill('a':'z', n)...))
    

    或者把它展平成矢量

    vec(join.(Iterators.product(fill('a':'z', n)...)))
    

    然而,请注意,在大多数情况下,这是不需要的,对于更大的 n 最好不要具体化输出,而是按照上面的建议迭代输出。