def pruntLayer(l,w): Keep=sorted(Open[l])[:w] # best `w` node from `Open[l]` Prune = [n for n in Open[l] if n not in Keep] beam_stack.top().f_max=min([f(n) for n in Prune]) for n in Prune: Open[l].remove(n)