Fix for costly pop() function calls on lists.
authorLukas Tönne <lukas.toenne@gmail.com>
Fri, 12 Dec 2014 23:51:57 +0000 (00:51 +0100)
committerLukas Tönne <lukas.toenne@gmail.com>
Fri, 12 Dec 2014 23:51:57 +0000 (00:51 +0100)
These are called a lot when the number of active cells (overall sampling
area) grows. Popping an element in the middle of a list is much more
expensive than popping from the end, but since we don't actually care
about ordering, we can simply swap the element for the one at the end.

object_physics_meadow/hierarchical_dart_throw.py

index 2ced12f..37347a5 100644 (file)
@@ -57,7 +57,9 @@ class GridLevel():
         return cell
 
     def deactivate(self, index):
-        return self.cells.pop(index)
+        c = self.cells[index]
+        self.cells[index] = self.cells.pop()
+        return c
 
     def cell_corners(self, cell):
         x0 = float(cell.i)