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