2017-11-07 11 views
-1

Pythonオンライン学習を始めました。以下のListおよびforループを使用して、関数入力からノードおよびエッジを数えるために、次のプログラムを作成しました。ノードとエッジを生成する簡単なルールはhttp://mathworld.wolfram.com/GridGraph.htmlです。 whileループとリスト内包ではない配列のみを使用して、同じプログラムをPythonで作成することは可能ですか?これで私を啓発してもらえますか?ループをwhileループに変換し、リスト理解をリストなしの理解に変換

def gridGen(a,b): 
    return [ 
      [(x,y) for y in range(0,a)] 
     for x in range(0,b) 
    ] 

def edgeListGen(grid): 
    edgeList = [] 
    for y, row in enumerate(grid): 
     for x, val in enumerate(row): 
      if (x < len(row)-1): 
       edgeList.append(((x,y),(x+1,y))) 
      if (y < len(grid)-1): 
       edgeList.append(((x,y),(x,y+1))) 
    return edgeList 

def printGrid(grid): 
    for line in grid: 
     for value in line: 
      print(value, end=' ') 
     print() 
    print()  

def printEdgeList(L): 
    for edge in edgeList: 
     print(edge[0], ',', edge[1]) 

grid=gridGen(5,2) 
printGrid(grid) 

edgeList=edgeListGen(grid) 
printEdgeList(edgeList) 

出力:

(0, 0) (0, 1) (0, 2) (0, 3) (0, 4) 
(1, 0) (1, 1) (1, 2) (1, 3) (1, 4) 

(0, 0) , (1, 0) 
(0, 0) , (0, 1) 
(1, 0) , (2, 0) 
(1, 0) , (1, 1) 
(2, 0) , (3, 0) 
(2, 0) , (2, 1) 
(3, 0) , (4, 0) 
(3, 0) , (3, 1) 
(4, 0) , (4, 1) 
(0, 1) , (1, 1) 
(1, 1) , (2, 1) 
(2, 1) , (3, 1) 
(3, 1) , (4, 1) 
+1

はい。可能です。 –

+0

@ juanpa.arrivillagaしかし、バニラ・パイソンの配列はないので、不可能です。 –

+0

リストの理解は 'for'ループで簡素化され、' while'ループ[this](https://stackoverflow.com/a/)に変換できます。 18900662/4249707)way –

答えて

0

Pythonは箱から出して、多次元配列をサポートしていませんが、あなたは簡単にnumpyのでこれを行うことができます。

例えば、gridGenはなる:

関連する問題