AttributeError:'str'对象没有属性'pop'

Osa*_*war 0 python

我试图使用pop与列表,但它给了我以下错误

AttributeError: 'str' object has no attribute 'pop'
Run Code Online (Sandbox Code Playgroud)

我使用pop的方式是:

vertex = my_queue.pop()
Run Code Online (Sandbox Code Playgroud)

令人困惑的是,当我使用print(顶点)时,它打印出数据,这意味着它工作正常,但同时显示错误令人困惑.

我的代码:

 def bfs(my_data):
      my_queue = [] #array to store vertices
      #print(my_data[0])
      my_queue.insert(0, my_data[0]); 
      my_data[0]['visited'] = '1';
      int_vertex = []

      while my_queue:
                vertex = my_queue.pop()
                for n_vertex in vertex['neighbors']:
                          #print(type(n_vertex))
                          int_vertex = int(n_vertex)
                          if my_data[int_vertex]['visited'] == '0':
                                    my_data[int_vertex]['visited'] = '1'
                                    test.insert(0, my_data[int_vertex])
                                    my_queue = str(test)
Run Code Online (Sandbox Code Playgroud)

my_queue和my_data是列表,顶点是dict

aba*_*ert 5

看看这两行:

vertex = my_queue.pop()
# ...
my_queue = str(test)
Run Code Online (Sandbox Code Playgroud)

因此,在第一次通过循环后,my_queue显然是一个str,因为你明确地将它转换为一个.

您可以看到字符串方法通用序列操作的列表.请注意,pop那里没有出现.这是因为pop只有一个方法可变的序列类型一样list.这正是这个错误告诉你的:

AttributeError: 'str' object has no attribute 'pop'
Run Code Online (Sandbox Code Playgroud)

即使有这样的方法,你会期望它返回什么?字符串的第一个字符?如何使用for n_vertex in vertex['neighbors'],显然希望vertexdict(或其他Mapping类型),而不是单字符字符串?


我不确定你到底想要做什么,但我怀疑取消这个str()电话本身并不足以解决你所有的问题.您将附加到名称中的列表,该列表test未在函数中的任何位置定义,因此可能是全局变量.然后扔掉任何内容,my_queue而不是将其分配给该全局变量.那可能不是你想要的.我的猜测 - 但这只是一个猜测 - 你要用这个代替最后两行:

my_queue.insert(0, my_data[int_vertex])
Run Code Online (Sandbox Code Playgroud)