Good day all,
I’m working on a script that obtains two lists of elements (FireAlarmDevices and GenericAnnotations) via a FilteredElementCollector and after performing some processing in a for loop, I wish to remove the element that I’ve just process from the list.
My first response was to just do FAElements.pop(FAElements.index(element)), but I got an error that “List[Element] object has no attribute ‘pop’”. So then tried del FAElements[FAElements.index(FAann)] and FAElements.remove(FAElements.index(element)) with similar results.
Is there a way to perform a “pop” or something similar for a list of elements?
Thanks!
The List[Element] type is from the .net framework. If you want to use a python list when you get elements using a FilteredElementCollector you need to wrap it with a list first.
Here’s a demonstration using RevitPythonShell
>>> elements = FilteredElementCollector(doc).OfClass(FamilyInstance).ToElements()
>>> type(elements)
<type 'List[Element]'>
>>> elements = list(FilteredElementCollector(doc).OfClass(FamilyInstance))
>>> type(elements)
<type 'list'>
>>>
1 Like
You want List.RemoveAt() for a .Net iList.
There is also List.Remove(), ListSlice() and List.RemoveRange()
IList.RemoveAt(Int32) Method (System.Collections) | Microsoft Learn