from itertools import * def islice_my(iterable, *args): # islice('ABCDEFG', 2) --> A B # islice('ABCDEFG', 2, 4) --> C D # islice('ABCDEFG', 2, None) --> C D E F G # islice('ABCDEFG', 0, None, 2) --> A C E G s = slice(*args) x = xrange(s.start or 0, s.stop or sys.maxint, s.step or 1) if len(x) == 0: steps = s.start or 0 for t in xrange(0,steps): next(iterable, None) return it = iter(x) nexti = next(it) for i, element in enumerate(iterable): if i == nexti: yield element nexti = next(it) if __name__=='__main__': s1 = 'test' s2 = 'peter' s3 = '123' it = chain(s1,s2,s3) isli = islice_my(it,3,3) for val in isli: print val, print print [c for c in it]