将for循环转换为while循环,并将列表理解转换为no列表理解

2024-10-04 11:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我自己开始在线学习Python。使用下面的List和for循环创建以下程序,从函数输入中计算节点和边。遵循以下规则:http://mathworld.wolfram.com/GridGraph.html生成节点和边的简单规则。是否可以在Python中只使用While和array而不使用循环和列表理解来创建相同的程序?请你把这件事告诉我好吗?你知道吗

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)

Tags: in程序forreturn节点规则defrange
1条回答
网友
1楼 · 发布于 2024-10-04 11:33:02

Python不支持开箱即用的多维数组,但是您可以使用numpy轻松地做到这一点。你知道吗

例如,gridGen会变成:

def gridGen(a, b):
    columns = np.repeat(np.arange(b), a)
    rows = np.tile(np.arange(a), b)
    return np.dstack([columns, rows]).reshape(2, 5, 2)

相关问题 更多 >