Php 列表索引必须是整数,而不是str
我正在尝试用Python编写下面的代码 PHP代码: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
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])