【问题标题】:Filtering out some element of a vector of tuples过滤掉元组向量的某些元素
【发布时间】:2022-06-14 02:34:13
【问题描述】:

我有一个非常大的元组向量,需要根据一些标准(条件)提取其中的一些。

也就是说,如果元组的第一个和第二个元素属于其他向量,我们要保存它们,否则不保存。例如,考虑以下我们有两个向量的向量(即开始和有效)

my_tuple = [(1, 2), (1, 3), (1, 5), (2, 3), (3, 4), (3, 5), (4, 1), (4, 5), (5, 2)]
starts = [[2, 8, 3, 4] , [1,2]]
valid = [ [2,3,6,8], [1,3,4,5] ]

我怎样才能只在my_links 中拥有它们的i 属于start 并且它们的j 属于有效的那些元组?

所需的输出应该是元组的向量,如下所示:

my_tuple = [(1, 2), (1, 3), (1, 5), (2, 3), (3, 4), (3, 5), (4, 1), (4, 5), (5, 2)]
starts = [[2, 8, 3, 4] , [1,2]]
valid = [ [2,3,6,8], [1,3,4,5] ]
##############Would like an OTUPUT like:

[ [(2,3)], [(1,3) , (1,5), (2,3)] ] 

基本上,我要过滤的是在开始和有效向量中遍历每对向量(在这种情况下,我们必须配对[2, 8, 3, 4] and [2,3,6,8] -- [1,2] and [1,3,4,5]),然后将它们组合成一个元组在@ 987654328@

我尝试发出这些命令,但没有用,您有什么建议?

new_tuple = [(i,j) for (i,j) in my_links if ( i in starts && j in valid) ]
new_tuple = [(i,j) for (i,j) in my_links if ( i in starts , j in valid) ]

【问题讨论】:

    标签: julia


    【解决方案1】:

    这是你想要的吗?

    julia> [filter(t -> t[1] in starts[i] && t[2] in valid[i], my_tuple) for i in eachindex(starts, valid)]
    2-element Vector{Vector{Tuple{Int64, Int64}}}:
     [(2, 3)]
     [(1, 3), (1, 5), (2, 3)]
    

    【讨论】:

    • 哇@Bogumił Kamiński 非常感谢!你能给我推荐一个资源来阅读更多关于 Julia 命令的信息吗?例如,我对 eachindex 不熟悉,想了解更多以变得更好
    • 当我运行命令时,输出是 2-element Vector{Tuple{Tuple{Int64, Int64}, Vararg{Tuple{Int64, Int64}}}}:而你的是 2-element Vector{ Vector{Tuple{Int64, Int64}}}:为什么?
    • 我使用 eachindex 而不是 zipmap,因为 eachindex 会自动检查两个集合是否具有相同的长度(zipmap 会选择更短的集合)。您可以在docs.julialang.org/en/v1/base/arrays/#Base.eachindex 中阅读有关eachindex 的信息。您有不同输出的原因是,在您的问题中,您首先将my_tuple 定义为具有my_tuple =[(... 的元组向量,但在其他地方它是具有my_tuple = ((... 的元组的元组(注意[( 的区别)。
    • 非常有用!谢谢@@Bogumił Kamiński
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2018-03-14
    相关资源
    最近更新 更多