Which solution is good to generate a list without None results from a function?
You can use an intermediate generator function:

[y for y in (complicated_function(x) for x in &lt;my_iterable&gt;) if y is not None]


An alternative is changing complicated_function to become a generator that accepts an iterable, instead of a pure function:

def complicated_function(iterable):
    for x in iterable:
        if x &lt; 0:
            yield "a"
        elif x == 3.6:
            yield "b"
        elif x == 4:
            continue
        elif x &gt; 10:
            yield "c"
        else:
            yield "d"


and then: list(complicated_function(&lt;my_iterable&gt;))