vector - Julia - 如何使用数组理解和三元运算符来初始化向量

标签 vector julia conditional-operator

这是我想要的行为......

result = []
for element in iterable
    if(condition)
        push!(result, element)
    else 
        continue 
    end
end

但是,当在 Julia 中使用带有三元运算符的数组理解时,我不确定除了什么都不使用之外,类似的“继续”会是什么。这会导致不需要的 Vector{Union{Nothing, ...}}。

result = [(condition ? element : nothing) for element in iterable]

例如:

vec1 = []
for v in -1:1
    if(v==0)
        push!(vec1,v)   
    else 
        continue   
    end 
end 

返回

julia> vec1 
1-element Vector{Any}:
0

同时

vec2 = [(v==0 ? v : nothing) for v in -1:1]

返回

julia> vec2 = [(v==0 ? v : nothing) for v in -1:1]        
3-element Vector{Union{Nothing, Int64}}:
nothing
0
nothing

而不是普通的 Vector{Int64}

最佳答案

如果您想使用array comprehensions ,您可以使用if关键字:

julia> [x for x in -2:2 if iseven(x)]
3-element Vector{Int64}:
 -2
  0
  2

如果不需要使用数组理解,可以使用 filter :

julia> filter(iseven, -2:2)
3-element Vector{Int64}:
 -2
  0
  2

不可能使用如下结构: result = [(condition ? element : <SOMETHING>) for element in iterable] 因为这将始终保留输入可迭代的长度。它相当于一个 map ,但看来你真的想要一个过滤器。

关于vector - Julia - 如何使用数组理解和三元运算符来初始化向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67067140/

相关文章:

c++ - 使用 n 维 C++ Vector 类实现算术运算符重载的更好方法?

excel - 在 Julia 中从数据框转到 excel 文件时出错

c++ - C 中的左值必需错误

c# - 有人可以用简单的英语或伪代码解释三元运算符吗?

java - 关于java方法递归返回的问题

c++ - 如何总结 C++ vector 的元素?

java 3D 旋转不起作用

c++ - 在一个范围内推送五个对象指针,然后检查对象的 bool 是否为 false,会出错

parallel-processing - 宏中的 RemoteChannel 正在停滞

input - 如何在 julia 的每次击键时读取键盘输入?