As in a lazy iterable without collecting? Just surround with () instead of [], it’ll make a generator expression. I didn’t say anything about NamedTuples because you didn’t provide an alternate input for that case, but now I’m reading it, maybe you wanted that output from those same inputs:
julia> nt = (NamedTuple{(:c1, :c2, :c3)}( (ai, bi...) ) for (ai, bi) in zip(a, b))
Base.Generator{Base.Iterators.Zip{Tuple{UnitRange{Int64}, Vector{Tuple{String, Int64}}}}, var"#3#4"}(var"#3#4"(), zip(1:5, [("a", 10), ("b", 20), ("c", 30), ("d", 40), ("e", 50)]))
julia> collect(nt)
5-element Vector{@NamedTuple{c1::Int64, c2::String, c3::Int64}}:
(c1 = 1, c2 = "a", c3 = 10)
(c1 = 2, c2 = "b", c3 = 20)
(c1 = 3, c2 = "c", c3 = 30)
(c1 = 4, c2 = "d", c3 = 40)
(c1 = 5, c2 = "e", c3 = 50)