t = [
["a1","a2"],
["a1","a3"],
["a1","ax"],
["ax","b1"],
["ax","bx"],
["bx","b3"]
]
import itertools
def find_matches(t,key):
return list(itertools.chain(*[[v] if not v.endswith("x") else find_matches(t,v) for k,v in t if k == key]))
print find_matches(t,"a1")
당신은이 빨리 ...
뭔가
t = [
["a1","a2"],
["a1","a3"],
["a1","ax"],
["ax","b1"],
["ax","bx"],
["bx","b3"]
]
class MyGraph:
def __init__(self,adjacency_table):
self.table = adjacency_table
self.graph = {}
for from_node,to_node in adjacency_table:
if from_node in self.graph:
self.graph[from_node].append(to_node)
else:
self.graph[from_node] = [to_node]
print self.graph
def find_leaves(self,v):
seen = set(v)
def search(v):
for vertex in self.graph[v]:
if vertex in seen:
continue
seen.add(vertex)
if vertex in self.graph:
for p in search(vertex):
yield p
else:
yield vertex
for p in search(v):
yield p
print list(MyGraph(t).find_leaves("a1"))#,"a1")
와우처럼 그래프의 인접 행렬로 목록을 치료할 수있다! 매력처럼 작동합니다. 감사! –
솔루션을 제공해 주셔서 감사합니다. 그것은 작은 테이블에서 잘 작동합니다. 그러나 큰 테이블 (6000 레코드)에서 실행할 때 재귀 한계를 초과했습니다. 대형 배열에 대한 대체 접근법에 대한 아이디어가 있습니까? –
순환 참조가 가능합니까? (예 : bx back to ax?) –