如何遍历队列?

时间:2019-08-10 13:52:48

标签: python queue

我有这段代码,它将使用BFS搜索树中的叶子节点

import queue

def BFS(lst,que):

    jst=[]

    for x in range(len(lst)):
        if 2*x+1<=len(lst)-1 and 2*x+2<=len(lst)-1:
            que.put(lst[2*x+1])
            que.put(lst[2*x+2])

    for y in iter(que.get(),None):
        if y in lst:
            if 2*(lst.index(y))<=len(lst)-1 and 2*(lst.index(y))+2<=len(lst)-1:
                que.get()
    return y



lst=[]
y=[]

x=int(input('Enter how many nodes:'))
if x%2==0:
    print("not the correct no of nodes")
else:
    for i in range(x):
        lst.append((input("Enter the nodes: ")))
    que=queue.Queue(maxsize=10)
    y.append(BFS(lst,que))
print(y)

它向我显示了一个错误:TypeError: iter(v, w): v must be callable,而我在其他文章中看到了该方法的工作原理。还有其他方法可以遍历队列吗?

1 个答案:

答案 0 :(得分:0)

即使您不使用iter()也可以。函数queue.get()的工作是从队列中取出下一个元素。因此,您的代码可能无需使用iter()就可以工作。

import queue

def BFS(lst,que):

    jst=[]

    for x in range(len(lst)):
        if 2*x+1<=len(lst)-1 and 2*x+2<=len(lst)-1:
            que.put(lst[2*x+1])
            que.put(lst[2*x+2])

    for y in que.get():
        if y in lst:
            if 2*(lst.index(y))<=len(lst)-1 and 2*(lst.index(y))+2<=len(lst)-1:
                que.get()
    return y


lst=[]
y=[]

x=int(input('Enter how many nodes:'))
if x%2==0:
    print("not the correct no of nodes")
else:
    for i in range(x):
        lst.append((input("Enter the nodes: ")))
    que=queue.Queue(maxsize=10)
    # also do not this change!
    y = y.append(BFS(lst,que))
print(y)