gpt4 book ai didi

python - 如何在 Julia 中使用 zip(*list) 解包机制进行迭代?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:37 24 4
gpt4 key购买 nike

在 Python 中,我可以同时循环遍历 2 个列表来提取 ngram:

>>> s = 'the lazy fox jumps over the brown dog'
>>> list(zip(*[s[i:] for i in range(2)]))
[('t', 'h'), ('h', 'e'), ('e', ' '), (' ', 'l'), ('l', 'a'), ('a', 'z'), ('z', 'y'), ('y', ' '), (' ', 'f'), ('f', 'o'), ('o', 'x'), ('x', ' '), (' ', 'j'), ('j', 'u'), ('u', 'm'), ('m', 'p'), ('p', 's'), ('s', ' '), (' ', 'o'), ('o', 'v'), ('v', 'e'), ('e', 'r'), ('r', ' '), (' ', 't'), ('t', 'h'), ('h', 'e'), ('e', ' '), (' ', 'b'), ('b', 'r'), ('r', 'o'), ('o', 'w'), ('w', 'n'), ('n', ' '), (' ', 'd'), ('d', 'o'), ('o', 'g')]
>>> list(map(''.join, zip(*[s[i:] for i in range(2)])))
['th', 'he', 'e ', ' l', 'la', 'az', 'zy', 'y ', ' f', 'fo', 'ox', 'x ', ' j', 'ju', 'um', 'mp', 'ps', 's ', ' o', 'ov', 've', 'er', 'r ', ' t', 'th', 'he', 'e ', ' b', 'br', 'ro', 'ow', 'wn', 'n ', ' d', 'do', 'og']

在 Julia 中,我可以执行类似的步骤,但我不确定如何像使用 Python 那样将它们拼凑起来。

首先我可以生成需要同时迭代的 2 个列表,所以在 Julia 中不是 Python [s[i:] for i in range(2)]:

> s = "abc def ghi lmnopq"
> [s[i:end] for i in range(1,2)]
2-element Array{String,1}:
"abc def ghi lmnopq"
"bc def ghi lmnopq"

要同时迭代它们,我可以这样做:

> c1, c2 = [line[i:end] for i in range(1,2)]
> [i for i in zip(c1, c2)]
> [join(i) for i in zip(c1, c2)]

Julia 有没有类似zip(*list) 的解包机制?如果是这样,如何避免在 Julia 中的最后一个列表理解之前创建 c1、c2?

最佳答案

等效操作在 Julia 中称为 splatting,由尾部省略号表示。这是您的 Python 代码的粗略音译:

julia> s = "the lazy fox jumps over the brown dog";
julia> collect(zip([s[i:end] for i in 1:2]...))
36-element Array{Tuple{Char,Char},1}:
('t', 'h')
('h', 'e')
('e', ' ')
(' ', 'l')
('l', 'a')
('a', 'z')


julia> map(join, zip([s[i:end] for i in 1:2]...))
36-element Array{String,1}:
"th"
"he"
"e "
" l"
"la"
"az"

请注意 range function 并没有像你想象的那样做......而且它很少被使用。范围通常使用 start:stop 冒号语法构造。

您还需要小心,因为 Julia 的字符串是按字节偏移量索引的,因此使用 1:2 会破坏 unicode 字符串。相反,我只是准确地写出 zip 参数并使用 Iterators.drop跳过第一个字符:

collect(zip(s, Iterators.drop(s, 1)))
join.(zip(s, Iterators.drop(s, 1)))

关于python - 如何在 Julia 中使用 zip(*list) 解包机制进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080507/

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