loops - 非并行 for 循环/多行推导式的缩减器

标签 loops julia list-comprehension

Julia 有一个用于 for 循环的并行宏,它允许执行以下操作:

s = @sync @parallel vcat for i in 1:9
  k = iseven(i) ? i÷2 : 3i+1
  k^2
end

由于指定的reducer是vcat,我们得到一个数字数组。

是否可以使用普通的 for 循环执行类似的操作(无需显式初始化并将!插入数组)?

由于我只是想减少使用 vcat,所以问这个问题的另一种方法是:是否有一种简洁可读的多行形式的数组理解?可以扩展到通常的理解语法,如下所示:

 s = [
       (k = iseven(i) ? i÷2 : 3i+1;
       k^2)
       for i in 1:9
       ]

但与 @parallel vcat for 语法相比,这似乎很困惑且可读性较差。有没有更好的方法来进行多行理解?

最佳答案

扩展@Gnimuc的答案,我认为mapreduce加上do-syntax相当不错:

julia> mapreduce(vcat, 1:9) do i
           k = iseven(i) ? i÷2 : 3i+1
           k^2
       end
9-element Array{Int64,1}:
  16
   1
 100
   4
 256
   9
 484
  16
 784

关于loops - 非并行 for 循环/多行推导式的缩减器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951565/

相关文章:

python - 在双 for 循环 python 中打印字符串的每一行时出现问题

python - 如何增加变量名/这是个坏主意吗

environment-variables - Julia:未能将 PyCall 配置为使用不同的版本

clojure - 'for' 在 clojure 中实际上不是懒惰的吗?

Python 列表理解 : adding unique elements into list?

android - 我想让一个倒数计时器在 android 中连续循环 - 需要关于如何做的意见

javascript - 在循环中,是重新定义全局变量更好,还是一遍又一遍地重新声明和重新定义局部变量更好,还是没有区别?

arrays - 在 Julia 1.0 中对特征值/特征向量进行排序

ggplot2 - 牛虻地 block 目前是可组合的吗?

python - 从嵌套列表中的子列表中提取第一个和最后一个元素