Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 列表索引必须是整数,而不是str_Php_Python_List - Fatal编程技术网

Php 列表索引必须是整数,而不是str

Php 列表索引必须是整数,而不是str,php,python,list,Php,Python,List,我正在尝试用Python编写下面的代码 PHP代码: if(!$my_data[$n_vertex]['visited']){ $my_data[$n_vertex-1]['visited'] = true; } 我在Python中的具体操作 def bfs(my_data): my_queue = [] #array to store vertices my_queue.insert(0, my_data[0]); #pass the firs

我正在尝试用Python编写下面的代码

PHP代码:

if(!$my_data[$n_vertex]['visited']){       
     $my_data[$n_vertex-1]['visited'] = true;
}
我在Python中的具体操作

def bfs(my_data):
      my_queue = [] #array to store vertices
      my_queue.insert(0, my_data[0]); #pass the first value to the first index of queue
      my_data[0]['visited'] = 'true';
      while my_queue:
                vertex = my_queue.pop()


      for n_vertex in vertex['neighbors']:
                #print(n_vertex)

                if my_data[n_vertex]['visited']:
                          continue
                else:
                          my_data[n_vertex]['visited'] = 'true'
                          my_queue.insert(0, my_data[n_vertex]);
我得到以下错误

 File "/Users/osamayawar/Desktop/Python/BFS.py", line 30, in bfs
 if my_data[n_vertex]['visited']:
 TypeError: list indices must be integers, not str
列表索引的确切含义必须是整数


注意:bfs是我的函数名

在Python中,列表索引总是整数。您可以使用索引访问该项:

l = ['a', 1, 2]
print l[0] ## 'a'
print l[1] ## 1
您可能需要的是一个
dict

d = {'vertex': 120}
print d['vertex'] #120

您正在尝试将字符串作为列表索引传递:

my_data[n_vertex]['visited']
“访问”不是一个数字


请将您的my_数据声明包括在内好吗?

作为堆栈跟踪报告,
my_数据[n_顶点]
是一个
列表。您不能通过
非整数
索引访问
列表
。例如,您可以通过[0,length-1]范围内的索引访问它

list1 = ["a", "b", "c"] # 3 elements
print list1[0] 
print list1[1]
print list1[2] # length - 1
你可能想


注意在Python中,任何不可变类型(
str
int
,…)都可以访问它。

这意味着
my\u data[n\u vertex]
解析为一个列表,当列表只接受整数下标时,您试图通过字符串键访问其中一个项目

如果在程序中添加以下行:

print type(my_data[n_vertex])
它将打印

您的代码中可能存在创建
my\u data
对象的错误。
您可能希望my_data上的项目是s而不是列表。

Python列表索引必须是整数。PHP使用键值对访问数组中的项,可能有重复项。例如:

$array= array( "name" => "Bill", "job" => "programmer",
                0 => "Bill",
                1 => "programmer");
PHP数组更类似于Python字典。看

查看您正在使用的数据会很有帮助。(my_数据的

如果您的数据结构与此类似,这是一个字典列表,那么它可以工作:

my_data=[{"visited":False, "some_other_key":"string-value"},
         {"visited":True, "some_other_key":"string-value"}
        ]
您可能希望按照以下方式重新编写python代码,使其更“pythonic”


什么是我的数据?什么是
n_顶点
?现在添加了完整的功能-它可能help@JeffCraine:PHP的数组类型与Python的列表类型不同。你需要同时使用列表和字典。是的,我需要一本字典。我已将代码粘贴到下面。我不知道如何获取它,因为它位于顶点['Neights']中n_顶点的循环内:#如果我的n_顶点数据[n_顶点]['visited'],则打印(n_顶点):继续其他:我的n_顶点数据[n_顶点]['visited']='true'我的_队列。插入(0,我的_数据[n_顶点])@JeffCraine请更新问题并向我们展示数据结构是什么样的。visited为true和false-用作布尔值。my_数据实际上是在读取一个文件,该文件中的访问数据为false或true。然后,正如您可能已经知道的那样,您需要使用字典结构。
if not my_data[n_vertex]['visited']:
    my_data[n_vertex]['visited'] = True
    my_queue.insert(0, my_data[n_vertex])