Próbuję zrobić w Julii to, co robi ten kod Pythona. (Znajdź wszystkie pary z dwóch list, których łączna wartość wynosi powyżej 7.)Zrozumienia listy i krotki w Julii
#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)
nie ma „jeśli” dla listowych w Julii. A jeśli używam filter(), nie jestem pewien, czy mogę przekazać dwa argumenty. Więc moja najlepsza propozycja jest taka:
#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)
nie znajdę to bardzo atrakcyjne. Moje pytanie brzmi: czy istnieje lepszy sposób w Julii?
Podoba mi się iteratory. Możesz zrobić podobną rzecz w pythonie, jeśli importujesz itertools. Obawiam się jednak, że popełniłem błąd, próbując sprowadzić moje pytanie do prostego przykładu. Moim głównym problemem jest argumentacja krotki. Czy możemy udawać, że funkcja sum_is_large() jest naprawdę dość skomplikowana i że musi wielokrotnie używać zmiennych a i b. Czy istnieje sposób na przekazanie tych dwóch zmiennych bez robienia czegoś takiego jak a, b = para? –
'a' i' b' są adresowalne jako 'x [1]' i 'x [2]' w 'bigfunc'. Możesz także zrobić 'x-> bigfunc (x ...)', a następnie zdefiniować 'bigfunc (a, b)'. Ten okrężny kod nie powinien kosztować zbyt wiele w wydajności, jeśli w ogóle. –
@DanGetz w Pythonie znajduje się [itertools] (https://docs.python.org/2/library/itertools.html), który zasadniczo zawiera podobne iteratory, które julia "Iterators.jl". –