我正在尝试在Julia中执行此Python代码的作用。 (从两个列表中查找总值大于7的所有对。)

#Python
def sum_is_large(a, b):
    return a + b > 7

l1 = [1,2,3]
l2 = [4,5,6]
l3 = [(a,b) for a in l1 for b in l2 if sum_is_large(a, b)]
print(l3)

在Julia中,没有列表表达的if。如果我使用filter(),我不确定是否可以传递两个参数。所以我最好的建议是这样的:
#Julia
function sum_is_large(pair)
    a, b = pair
    return a + b > 7
end

l1 = [1,2,3]
l2 = [4,5,6]

l3 = filter(sum_is_large, [(i,j) for i in l1, j in l2])
print(l3)

我觉得这不是很吸引人。所以我的问题是,朱莉娅有更好的方法吗?

最佳答案

在Julia中使用非常流行的软件包Iterators.jl:

using Iterators       # install using Pkg.add("Iterators")
filter(x->sum(x)>7,product(l1,l2))

是产生对的迭代器。因此,要获得与OP相同的打印输出:
l3iter = filter(x->sum(x)>7,product(l1,l2))
for p in l3iter println(p); end

迭代器方法可能会大大提高内存效率。当然,可以只用l3 = collect(l3iter)来获取配对向量。

@ user2317519,只是好奇,python是否有等效的迭代器形式?

关于julia - 在Julia中列出理解和元组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36337988/

10-13 03:20