# Difference handling missing of enumerate and eachindex

**URL:** <https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125>\
**Category:** Internals & Design\
**Tags:** iterators, missing-values\
**Created:** [March 19, 2022, 10:12am UTC](https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125 "2022-03-19T10:12:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![drandran12](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drandran12/32/220647_2.png) [@drandran12](https://discourse.julialang.org/u/drandran12)\
**Post date:** [March 19, 2022, 10:12am UTC](https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125/1 "2022-03-19T10:12:30Z")

</div>

The following behavior has cost me 6 hours of debugging. Is there a reason `enumerate` and `eachindex` handle the `skipmissing` itorator differently?

```julia
julia> a = [missing, missing, missing, missing, missing, missing, missing, 5, missing, missing, missing, missing, missing]
13-element Vector{Union{Missing, Int64}}:
  missing
  missing
  missing
  missing
  missing
  missing
  missing
 5
  missing
  missing
  missing
  missing
  missing

julia> for i in eachindex(skipmissing(a))
       @show i
       end
i = 8

julia> for (i, b) in enumerate(skipmissing(a))
       @show i
       end
i = 1

```

Generated with julia 1.7.0.

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [March 19, 2022, 11:02am UTC](https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125/2 "2022-03-19T11:02:11Z")

</div>

They are two different things: [`eachindex`](https://docs.julialang.org/en/v1/base/arrays/#Base.eachindex) gives you (valid) indices that you can index with, [`enumerate`](https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.enumerate) just counts from 1 for any arbitrary iterator.

Here is another, perhaps more illustrative, example:

```julia
julia> using OffsetArrays

julia> v = OffsetVector([1, 2, 3], -1);

julia> for (i, _) in enumerate(v)
           @show i
       end
i = 1
i = 2
i = 3

julia> for i in eachindex(v)
           @show i
       end
i = 0
i = 1
i = 2

```

* * *

(It is preffered to just copy and paste your code instead of including a screenshot – images are not searchable, and it is not possible for people that want to help to copy the code and play around. In this case you did both, but the image doesn’t really add anything.)

---

<div class="post-metadata">

**Author:** ![drandran12](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drandran12/32/220647_2.png) [@drandran12](https://discourse.julialang.org/u/drandran12)\
**Post date:** [March 19, 2022, 11:17am UTC](https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125/3 "2022-03-19T11:17:52Z")

</div>

Thanks for the feedback! It also explains the name: “enumerate”.

---

<div class="post-metadata">

**Author:** ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)\
**Post date:** [March 19, 2022, 2:10pm UTC](https://discourse.julialang.org/t/difference-handling-missing-of-enumerate-and-eachindex/78125/4 "2022-03-19T14:10:43Z")

</div>

You might also be interested in

```julia
julia> for (i, b) in pairs(skipmissing(a))
           @show i
       end
i = 8

```
