- `find_current_element` is a poor name, `find_first_nonempty` would better describe what it's doing. - `find_current_element` is a strange form of iteration where you constantly resume the function from where it left off. This would be better described using a generator function. - Your function is good as you're swapping items in the list rather than `list.insert(0, value)`. - You don't need to invert the list twice as you can just work backwards, appending to the end. - Since we can do this by mutating the original list, I won't return the new list. ```python def find_non_empty(values, is_empty): for i in reversed(range(len(values))): if not is_empty(values[i]): yield i def push(values, is_empty): good_index = len(values) - 1 for i in find_non_empty(values, is_empty): values[i], values[good_index] = values[good_index], values[i] good_index -= 1 ``` ```python >>> list_ = [" ", " ", "X", " ", " ", "Z", " ", "Y", " "] >>> push(list_, lambda i: i == " ") >>> list_ [' ', ' ', ' ', ' ', ' ', ' ', 'X', 'Z', 'Y'] ```