我正在尝试在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/