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