rantingrick <rantingr...@gmail.com> writes: > unspeakably ugly code.
I'd write the code differently to not do all those branches. I like to use 1-elemnt lists as an option type, instead of using None, so you can just concatenate them together to get the first non-empty one. Untested code: array = [c1,c2,c3,c4,c5,c6,...] # return first element of iterable that matches condition, wrapped # as a 1-element list. If no match, return empty list. def xfind(condition, iterable): for x in iterable: if condition(x): return [x] return [] while looping: cs = xfind(this_condition, array) + xfind(other_condition, array) # cs is now a list of either zero, one, or two matching elements if len(cs) == 1: r = cs[0] elif len(cs) = 2: r = <whichever is best> else: break best = array.pop(r) do_somthing_with(best) Obviously you can golf the above in various ways. -- http://mail.python.org/mailman/listinfo/python-list