Saltar al contenido

Comprensiones de listas y tuplas en Julia

Después de de esta larga compilación de datos pudimos resolver este apuro que suelen tener muchos los usuarios. Te regalamos la respuesta y nuestro objetivo es serte de gran apoyo.

Solución:

Usando el muy popular paquete Iterators.jl, en Julia:

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

es un iterador que produce los pares. Entonces, para obtener la misma impresión que el OP:

l3iter = filter(x->sum(x)>7,product(l1,l2))
for p in l3iter println(p); end

El enfoque del iterador es potencialmente mucho más eficiente en memoria. Por supuesto, uno podría simplemente l3 = collect(l3iter) para obtener el vector par.

@ user2317519, solo curiosidad, ¿hay una forma de iterador equivalente para python?

Guardias (if) ahora están disponibles en Julia v0.5 (actualmente en la etapa de candidatura a lanzamiento):

julia> v1 = [1, 2, 3];

julia> v2 = [4, 5, 6];

julia> v3 = [(a, b) for a in v1, b in v2 if a+b > 7]
3-element ArrayTupleInt64,Int64,1:
 (3,5)
 (2,6)
 (3,6)

Tenga en cuenta que los generadores ahora también están disponibles:

julia> g = ( (a, b) for a in v1, b in v2 if a+b > 7 )
Base.GeneratorFilter##18#20,Base.Prod2ArrayInt64,1,ArrayInt64,1,##17#19(#17,Filter##18#20,Base.Prod2ArrayInt64,1,ArrayInt64,1(#18,Base.Prod2ArrayInt64,1,ArrayInt64,1([1,2,3],[4,5,6])))

Otra opción similar a la de @DanGetz usando también Iterators.jl:

function expensive_fun(a, b)
    return (a + b)
end

Entonces, si la condición también es complicada, se puede definir como una función:

condition(x) = x > 7

Y por último, filtrar los resultados:

>>> using Iterators
>>> result = filter(condition, imap(expensive_fun, l1, l2))

result es un iterable que solo se calcula cuando es necesario (económico) y se puede recopilar collect(result) si es requerido.

La línea única si la condición del filtro es lo suficientemente simple sería:

>>> result = filter(x->(x > 7), imap(expensive_fun, l1, l2))

Nota: imap funciona de forma nativa para un número arbitrario de parámetros.

Tienes la opción de estimular nuestra labor dejando un comentario o dejando una puntuación te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *