Python中的图

来源:互联网 发布:英雄杀最新探宝数据 编辑:程序博客网 时间:2024/06/06 10:50

   
>>> def searchGraph(graph,start,end):                    #搜索树
 results=[]                                                                  # 路径裂变
 generatePath(graph,[start],end,results)                   #生成路径
 results.sort(lambda x,y:cmp(len(x),len(y)))              #按路径长短排序
 return results

 
>>> def generatePath(graph,path,end,results):         #生成路径
 state=path[-1]
 if state==end:
  results.append(path)
 else:
  for arc in graph[state]:
   if arc not in path:
    generatePath(graph,path+[arc],end,results)

 

if __name__=='__main__':
 Graph={'A':['B','C','D'],'B':['E'],'C':['D','F'],'D':['B','E','G'],'E':[],'F':['D','G'],'G':['E']}        #构建树
 r=searchGraph(Graph,'A','D')
 print '******************************'
 print '      path A to D             '
 print '******************************'
 for i in r:
  print i
 r=searchGraph(Graph,'C','E')
 print '******************************'
 print '      path C to E             '
 print '******************************'
 for i in r:
  print i

  
******************************
      path A to D            
******************************
['A', 'D']
['A', 'C', 'D']
['A', 'C', 'F', 'D']
******************************
      path C to E            
******************************
['C', 'D', 'E']
['C', 'D', 'B', 'E']
['C', 'D', 'G', 'E']
['C', 'F', 'D', 'E']
['C', 'F', 'G', 'E']
['C', 'F', 'D', 'B', 'E']
['C', 'F', 'D', 'G', 'E']

 

 

《注》cmp( x, y)  比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1.

          lambda是在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢?

             1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
             2 python lambda它只是一个表达式,而def则是一个语句。

            下面是python lambda的格式,看起来好精简阿。
            lambda x: print x

            如果你在python 列表解析里用到python lambda,我感觉意义不是很大,因为python lambda它会创建一个函数对象,但马上又给丢弃了,因为你没有使用它的返回值,即那个函数对象。也正是由于lambda只是一个表达式,它可以直接作为python 列表或python 字典的成员,比如:

info = [lamba a: a**3, lambda b: b**3]

在这个地方没有办法用def语句直接代替。因为def是语句,不是表达式不能嵌套在里面,lambda表达式在“:”后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

下面举几个python lambda的例子吧
1单个参数的:
g = lambda x:x*2
print g(3)
结果是6

2多个参数的:
m = lambda x,y,z: (x-y)*z
print m(3,1,2)
结果是4

原创粉丝点击