How do I efficiently filter computed values within a Python list comprehension?

后端 未结 9 2348
青春惊慌失措
青春惊慌失措 2020-12-15 05:29

The Python list comprehension syntax makes it easy to filter values within a comprehension. For example:

result = [x**2 for x in mylist if type(x) is int]
<         


        
9条回答
  •  天涯浪人
    2020-12-15 06:11

    This is exactly what generators are suited to handle:

    result = (expensive(x) for x in mylist)
    result = (do_something(x) for x in result if some_condition(x))
    ...
    result = [x for x in result if x]  # finally, a list
    
    1. This makes it totally clear what is happening during each stage of the pipeline.
    2. Explicit over implicit
    3. Uses generators everywhere until the final step, so no large intermediate lists

    cf: 'Generator Tricks for System Programmers' by David Beazley

提交回复
热议问题