unnecessary-enumerate (FURB148)
Derived from the refurb linter.
Fix is sometimes available.
This rule is unstable and in preview. The --preview
flag is required for use.
What it does
Checks for uses of enumerate
that discard either the index or the value
when iterating over a sequence.
Why is this bad?
The built-in enumerate
function is useful when you need both the index and
value of a sequence.
If you only need the index or values of a sequence, you should iterate over
range(len(...))
or the sequence itself, respectively, instead. This is
more efficient and communicates the intent of the code more clearly.
Known problems
This rule is prone to false negatives due to type inference limitations;
namely, it will only suggest a fix using the len
builtin function if the
sequence passed to enumerate
is an instantiated as a list, set, dict, or
tuple literal, or annotated as such with a type annotation.
The len
builtin function is not defined for all object types (such as
generators), and so refactoring to use len
over enumerate
is not always
safe.
Example
Use instead: