[問題] node, actions, visited=fringe.pop()

作者: veriaw (ver)   2016-03-23 11:48:19
不好意思怕有人誤會
得先說明這是作業,但沒要求解釋以下的問題
最近在寫berkelyey pacman
有3個步驟有點不太明白
想請問
(1)
node, actions, visited = fringe.pop()
一次把右邊的pop assign給左邊的多個variables是什麼意思呢?
(2)
fringe.push((coord, actions+[direction], visited+[node]))
push定義如下,我的理解是依序把coord, actions+[direction], visited+[node]
加入到list中,不知是否正確呢?
(3)
for coord, direction, steps in problem.getSuccessors(node):
我的程度只到 for i in list:
有點不太明白for 後面接多個variables跑的意思是什麼
#Code:
def depthFirstSearch(problem)
fringe = util.Stack()
fringe.push( (problem.getStartState(), [], []) )
while not fringe.isEmpty():
node, actions, visited = fringe.pop()
for coord, direction, steps in problem.getSuccessors(node):
if not coord in visited:
if problem.isGoalState(coord):
return actions + [direction]
fringe.push((coord, actions + [direction], visited + [node] ))
return []
#util
class Stack:
"A container with a last-in-first-out (LIFO) queuing policy."
def __init__(self):
self.list = []
def push(self,item):
"Push 'item' onto the stack"
self.list.append(item)
def pop(self):
"Pop the most recently pushed item from the stack"
return self.list.pop()
def isEmpty(self):
"Returns true if the stack is empty"
return len(self.list) == 0
作者: ResolaQQ (ResolaQQ)   2016-03-24 02:36:00
2的理解如果我沒誤會的話,是錯誤的白話點,1的意思是寫 a, b, c = (1, 2, 3),則 a = 1, b = 2, c = 32我猜你以為是list.append(a), list.append(b), list.append(c)但實際上是 list.append( (a, b, c) )前面是加入三個物件,後面是加入一個物件但它有三個資料3同1,把i代換成1的例子就對了
作者: caim0725 (該隱)   2016-03-23 23:20:00
每迭代一次就會產生三個元素 再一一指派給左側
作者: uranusjr (←這人是超級笨蛋)   2016-03-23 12:37:00
這三個其實是同一個概念: tuple, 第一個叫做 unpackingon assignment, 就是直接把回傳的 tuple 在 = 時展開在 for 迴圈放多個變數也是這個概念的變形
作者: veriaw (ver)   2016-03-26 23:13:00
非常感謝3位的協助我的誤解完全解開了~~

Links booklink

Contact Us: admin [ a t ] ucptt.com