Я пытаюсь сделать в Julia то, что делает этот код Python. (Найти все пары из двух списков, суммарное значение выше 7.)List comprehensions and tuples in Julia
#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)
Там нет «если» для списочных в Джулию. И если я использую 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)
Я не считаю это очень привлекательным. Итак, мой вопрос: есть ли лучший способ в Джулии?
Мне нравятся итераторы. Вы можете сделать подобное в python, если импортируете itertools. Однако, боюсь, я ошибся, пытаясь свести свой вопрос к простому примеру. Моя основная проблема связана с кортежем как аргументом. Можем ли мы сделать вид, что функция sum_is_large() действительно довольно сложна и что ей необходимо повторно использовать переменные a и b. Есть ли способ передать эти две переменные, не делая что-то вроде a, b = pair? –
'a' и' b' адресуются как 'x [1]' и 'x [2]' в 'bigfunc'. Вы также можете сделать 'x-> bigfunc (x ...)', а затем определить 'bigfunc (a, b)'. Этот кодовый объезд не должен стоить слишком дорого, если вообще. –
@DanGetz в python есть [itertools] (https://docs.python.org/2/library/itertools.html), который в основном содержит похожие итераторы, которые julia's 'Iterators.jl'. –