I guess enumerate is the best way to check for first argument. Note that if someone passes you the iterator as argument you have now way of checking if the consumed items from it. istail can be implemented using itertools.chain, see https://gist.github.com/1202260