# How to iterate layers

**URL:** <https://discourse.mcneel.com/t/how-to-iterate-layers/69972>\
**Category:** Grasshopper Developer\
**Created:** [September 1, 2018, 4:52pm UTC](https://discourse.mcneel.com/t/how-to-iterate-layers/69972 "2018-09-01T16:52:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![zhipengli1995](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/zhipengli1995/32/148493_2.png) [@zhipengli1995](https://discourse.mcneel.com/u/zhipengli1995)\
**Post date:** [September 1, 2018, 4:52pm UTC](https://discourse.mcneel.com/t/how-to-iterate-layers/69972/1 "2018-09-01T16:52:59Z")

</div>

for some purpose, I want to iterate all layers in a document in python  
well, there are several ways, for example:  
(1) get the list of the names of all layers, so we can write:

```
import rhinoscriptsyntax as rs
import Rhino
import scriptcontext as sc

list = rs.LayerNames()

for current_layer in list:
    layer = sc.doc.Layers.FindName(current_layer)
    print layer

```

(2)get the number of all layers, then use `for` loop:

```
import rhinoscriptsyntax as rs
import Rhino
import scriptcontext as sc

layer_num = rs.LayerCount()
for current_layer in range(layer_num):
    layer = sc.doc.Layers.FindIndex(current_layer)
    print layer

```

it seems that I find the third way, use `sc.doc.Layers.GetEnumerator()`, but I don’t know how to continue. I guess it well be a more advanced solution.  
anyone can help me ? thank you

---

<div class="post-metadata">

**Author:** ![mikity\_kogekoge](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/mikity_kogekoge/32/476658_2.png) [@mikity\_kogekoge](https://discourse.mcneel.com/u/mikity_kogekoge)\
**Post date:** [September 1, 2018, 9:38pm UTC](https://discourse.mcneel.com/t/how-to-iterate-layers/69972/2 "2018-09-01T21:38:38Z")

</div>

Hello,  
Find\*\*\* (i.e., search) is costly.

Try

```auto
for layer in sc.doc.Layers:
    print layer.Name

```

instead.

You can also write

```auto
for layer in sc.doc.Layers.GetEnumerator():
    print layuer.Name

```

but I guess Python internally converts the first one to the second one, so there is no merit to call GetEnumerator in general.

---

<div class="post-metadata">

**Author:** ![zhipengli1995](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/zhipengli1995/32/148493_2.png) [@zhipengli1995](https://discourse.mcneel.com/u/zhipengli1995)\
**Post date:** [September 2, 2018, 5:36am UTC](https://discourse.mcneel.com/t/how-to-iterate-layers/69972/3 "2018-09-02T05:36:54Z")

</div>

thank you very much!!
