Paul Rubin enlightened us with:
>> height = 0
>> for block in stack:
>> if block.is_marked():
>> print "Lowest marked block is at height", height
>> break
>> height += block.height
>> else:
>> raise SomeError("No marked block")
>
> all_heights = [block.height for block in stack if block.is_marked()]
> if all_heights:
> height = sum(all_heights)
> else:
> raise SomeError("No marked block")
>
> Alternatively (lower memory usage for large list):
>
> all_heights = (block.height for block in stack if block.is_marked())
> try:
> height = all_heights.next()
> height += sum(all_heights)
> except StopIteration:
> raise SomeError("No marked block")
I must say that the for/else construct is a LOT more readable than the
rewritten alternatives.
Sybren
--
Sybren Stüvel
Stüvel IT - http://www.stuvel.eu/
--
http://mail.python.org/mailman/listinfo/python-list