 <p>Since a list comprehension definitionally generates another list, you can't use it to generate a single value. The aren't <em>for</em> that. (Well... there is <a href="http://stackoverflow.com/a/16632125/12779">this nasty trick</a> that uses a leaked implementation detail in old versions of python that can do it. I'm not even going to copy the example code here. Don't do this.)</p> <p>If you're worried about the stylistic aspects of <code>reduce()</code> and its ilk, don't be. Name your reductions and you'll be fine. So while:</p> <pre><code>all_union = reduce(lambda a, b: a.union(b), L[1:], L[0]) </code></pre> <p>isn't great, this:</p> <pre><code>def full_union(input): """ Compute the union of a list of sets """ return reduce(lambda a, b: a.union(b), input[1:], input[0]) result = full_union(L) </code></pre> <p>is pretty clear.</p> <p>If you're worried about <em>speed,</em> check out the <a href="https://pypi.python.org/pypi/toolz/" rel="nofollow">toolz</a> and <a href="https://pypi.python.org/pypi/cytoolz/0.6.1" rel="nofollow">cytoolz</a> packages, which are 'fast' and 'insanely fast,' respectively. On large datasets, they'll often let you avoid processing your data more than once or loading the whole set in memory at once, in contrast to list comprehensions.</p>