Level 1 : Circular iterator that loops indefinitely over a list.


class CircularIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if not self.data:
            raise StopIteration
        value = self.data[self.index]
        self.index = (self.index + 1) % len(self.data)
        return value

it = iter(CircularIterator([1, 2, 3]))
for _ in range(5):
    print(next(it), end=" ")

Author: SandhyaR | Tags: iterator | 1859+ Python FAQs | Share
escape-operator | raise | tuples | using-map()-for-transformations | time-series-with-pandas | turtle | type-conversion | while-loop | using-assertions-(assertequal,-assertraises) | working-with-binary-files-(rb,-wb) | touples | working-with-temporary-files-using-tempfile | using-yield-in-functions | thread | using-os-and-pathlib-modules | tuple-methods | regular-expression | string-method | benefit | complex | strings | context-manager | default-mutable-argument | slice | advanced-file-operations | boolean | list-join | handling-missing-values-(fillna,-dropna) | list-vs-tuple | mapping-function | __all__-attribute | tuple | inherit | dictionary | python-repl | print | list-slicing | namespace | list-comprehension | gil | string-methods | virtual-environment | decimal | global-keyword | data-type | indexing | why-use-multiprocessing-over-threading?-(gil) | operator | reading:-read(),-readline(),-readlines() | frozenset | append | test-discovery | recursion | managing-directories-with-os-and-shutil | exponentiation | iterable | typeerror | odd-number | math-copysign | postfix | collection | control-statement | regex | nested-loop | data-structures | list-operation | attribute | parsing-with-strptime | operators | thread-synchronization | slicing | compute | random | exception-handling | round-function | oops | objects | working-with-dates-and-times | list-comprehensions | built-in-modules | python-syntax-and-structure | regular-expressions | numeric | pep | function-and-scope | library | destructor | operations | recurssion | operator-or | keyword | type-conversion-and-casting | class-decorators | python-django | directory-operations | string | python_version | parameter | string-slicing | data_structure | descriptors | difference-between-threads-and-processes | lambda | data-structure | generators | virtual-environment | string-slicing | enumerate() | object-attribute | software-design | using-else-and-finally | functional-programming | bitwise | operator-overloading | match | memory-management | unit-testing | return-statement | for | package-management | assignment-operators | datatype | lambdas | anchors-(^,-$) | key-value-pairs | logical-operators | while-else-loop | iterators | map-function | function | application | creating-and-starting-threads | operand | syntax-error | list-mutation | multithreading | indexing:-loc-vs-iloc | loop | using-join()-and-is_alive()-methods | assignment-operator | integers | list | pandas | floating-point-precision | shallow-copy | class | module | while-and-for-loop | sorted | array | single-inheritance | stack | method | file_handling | counter-function | function-argument | floats | string-formatting | quantifiers-(*,-+,-?,-{}) | zip | global | statement | built-in-function | formal-and-actual-parameter | operator-and | identity-operator | namedtuple | class-and-object | head-and-tail | version-check | overflow | command-line-parsing | exception | data-type | def | identity-operators-(is,-is-not) | condition | random-function | error | thread-safe-data-structures-(queue.queue) | conditional-statement | init | binary | filter | python-module | oop | encapsulation | memory | interpreter | walking-through-directories-using-os.walk() | staticmethod | boolean-and-non-boolean | input-function | bitwise-operator | raise-statement | immutability | set-operation | dataframe-and-series-objects | matplotlib | complex-number | zfill-function | constructor | introduction-to-python | docstring | set | bitwise-operator | sets | using-the-threading-module | type_conversion | multiple-inheritance | static-method | error-handling | feature | iterator | list,-set,-and-dictionary-comprehensions | matrix | global-variable | invalid-list | format | identity-operator | access-modifier | data-types | multiprocessing | dictionaries | opening-files-(open()) | creating-custom-modules | generators-in-python | magic-method | input-function | using-lists-as-stacks | id-function | basic | copy | immutable-data-type | higher-order-function | defining-functions | logical-operator | while-loops | print-statement | lambda-function | sorting | __future__ | sum() | pickling--unpickling | membership-operators-(in,-not-in) | overriding-methods | asyncio-module | import-method | comprehension | input | loop-control | polymorphism | working-with-file-paths | arithmetic-expression | zip-function | comment | dictionary-methods | datetime | conditional-statements | update | sum-function | data-type-conversions | built-in | string-method | lambda-functions | async | filtering-and-indexing | data-structures-in-python | indentation | call | writing:-write(),-writelines() | data-structure | introduction-to-threads | dictionary-comprehensions | type-conversion | assert | mutable | numpy | factorial-function | arbitrary-arguments-(*args,-**kwargs) | goto-function | functions | choice | precedence | syntaxerror | range | multiple-inheritance | rollback | list-indexing | class-and-inheritance | string-formatting | heap-memory | asyncio | integer | else-statement | string-manipulation | mysql | datetime.date,-datetime.time,-datetime.datetime | joining-and-merging-dataframes | lists | inheritance | python-operators | string-concatenation | global-variable | pass | error-handling | conditional-statement | installation | pseudocode | class-and-instance-variable | reading-and-writing-large-files-efficiently | introduction-to-multiprocessing | int | design-principle | python | yield | implementation | round | max-min | mathematics | debugging | precedence-and-associativity | exception-handling | control-flow | python-history | generator | boolean-masking | arithmetic-operation | default-arguments | reading-and-writing-files | sys | syntax | aggregating-data-with-functools.reduce() | syntax-error | __init_subclass__ | control-flow | file-handling | identifier | else | join | threading | min-max-function | built-in-function | name-mangling | list-methods-and-slicing | tuple-unpacking | literal-characters-and-special-characters | mathematical-function | fabs-function | scientific-notation | sorting-and-ranking | variable | math | intering | string-iteration | multiple-except-blocks | split | with-statement | list-method | classes | decorator | counter | file | version | list-comprehension | expression | loops | functional-programming | booleans | dicts | min-function | methods | matrix-list-comprehension | conversion | comparison | method-overloading | loop-control-statements | swapping | deep-copy | sys-module | filter-function | center | binary-operation | collections | file-handling | encoding | logical-operation | logical-operator | expand-tab | formatting-with-strftime ...