I am writing a function for implementing breadth-first search over a no. of nodes in a directed graph. The nodes are all numbers from 1-100. This is my implementation:

    def BFS(start= 1, adj_dict= None):
        level= {}
        current= [start]
        visible= []
        lno= 0
        step= 0
        for ele in current:
            if ele not in level:
                level[ele]= lno 
                visible.extend(adj_dict[ele])
            current.remove(ele)
            if current==[]:
                current= visible[:]
                visible= []
                lno+=1
        return level

This did not work correctly and stored only the `start` key in `adj_dict`. I ran the debugger and saw that the code exited for loop after first iteration. 

Upon searching a little about the cause of this, I found this question- https://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating on SO. This was the cause of error. The answers to that question suggest that I create a new list somehow, either using list comprehension or using slicing but none of them will help in my case.

So, I thought of adding a while loop to achieve the desired result. This is how it looks now:

    while current:
        for ele in current:
            if ele not in level:
                level[ele]= lno 
                visible.extend(adj_dict[ele])
            current.remove(ele)
            if current==[]:
                current= visible[:]
                visible= []
                lno+=1

This works now. What I want to ask is this a correct way to achieve the effect or am I just getting lucky and the code can break easily? Also is this the pythonic way?