def single(iterable, pred=None, default=_undefined): iterator = iter(where(iterable, pred)) try: result = compatible.next(iterator) except StopIteration: if default is not _undefined: return default raise LookupError('enumerable contains no matching element') else: try: compatible.next(iterator) raise LookupError('enumerable contains more than one element') except StopIteration: return result
def elementat(iterable, index, default=_undefined): try: return compatible.next(iter(skip(iterable, index)), default) except StopIteration: raise IndexError('enuemrable index out of range')