# Filter elements with python in lists

**URL:** <https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880>\
**Category:** Revit\
**Tags:** python, dynamo\
**Created:** [February 2, 2022, 12:13pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880 "2022-02-02T12:13:23Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Glutinator030](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/glutinator030/32/132174_2.png) [@Glutinator030](https://forum.dynamobim.com/u/Glutinator030)\
**Post date:** [February 2, 2022, 12:13pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/1 "2022-02-02T12:13:23Z")

</div>

Hi all,

I’m new to python and want to filter a specific floor type in a view. Now my script works when I just use a string node. Although the problem is that I’m working with the Data Shape package with user input so Dynamo creates a list.

Does anyone could help me out?

Thanks in advance!

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/d/c/dc7989ba5824dd87cb25230af1cbac5f9af371a2.png)  
ERROR:  
File “”, line 33, in   
TypeError: expected str, got List[object]

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/6/3/634207384211e1bdbd160a5afbeb0b9af09eca17.png)

```auto
import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

user_input = UnwrapElement(IN[0])

collector = FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(BuiltInCategory.OST_Floors).WhereElementIsNotElementType().ToElements()

floors = []
for f in collector:
	if f.Name.Contains(user_input):
		floors.append(f)

OUT = floors

```

---

<div class="post-metadata">

**Author:** ![Daan](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/daan/32/82246_2.png) [@Daan](https://forum.dynamobim.com/u/Daan)\
**Post date:** [February 2, 2022, 12:41pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/2 "2022-02-02T12:41:27Z")

</div>

Hi @Glutinator030 ,

Is there a specific reason why you need to use Python instead of Dynamo Nodes? The filtering you are describing can be easily done with OOTB Dynamo Nodes.

---

<div class="post-metadata">

**Author:** ![Glutinator030](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/glutinator030/32/132174_2.png) [@Glutinator030](https://forum.dynamobim.com/u/Glutinator030)\
**Post date:** [February 2, 2022, 1:18pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/3 "2022-02-02T13:18:02Z")

</div>

Do you have any suggestions? 🙂

---

<div class="post-metadata">

**Author:** ![Daan](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/daan/32/82246_2.png) [@Daan](https://forum.dynamobim.com/u/Daan)\
**Post date:** [February 2, 2022, 1:32pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/4 "2022-02-02T13:32:17Z")

</div>

Something like this should get you started 😃

> [@Natural sort Elements by Name](https://forum.dynamobim.com/t/natural-sort-elements-by-name/72841/3):
>
> Works great smiley Thank you for taking the time @Daan slight_smile

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [February 4, 2022, 6:46pm UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/5 "2022-02-04T18:46:41Z")

</div>

Hi,  
try this

```auto
import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

user_input = IN[0][0] if isinstance(IN[0], list) else IN[0]

collector = FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(BuiltInCategory.OST_Floors).WhereElementIsNotElementType().ToElements()

floors = []
for f in collector:
	if f.Name in user_input:
		floors.append(f)

OUT = floors

```

---

<div class="post-metadata">

**Author:** ![Glutinator030](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/glutinator030/32/132174_2.png) [@Glutinator030](https://forum.dynamobim.com/u/Glutinator030)\
**Post date:** [February 7, 2022, 9:02am UTC](https://forum.dynamobim.com/t/filter-elements-with-python-in-lists/72880/6 "2022-02-07T09:02:34Z")

</div>

Thanks works perfect!
