我实际上正在尝试创建一个函数来将二维列表向左或向右旋转 90°(它必须适用于 n 行和 n 列)。 我找到了一种使用两个循环“for”来完成此操作的方法,但它告诉我,当我尝试调用该函数时,生成器不可下标。 当我一个月前开始使用 Python 时,我对生成器是什么一无所知,而且我也不理解我在网上找到的内容。顺便说一句,由于语言的原因,我很难研究隐藏在其他帖子中的答案。
这是向右转的代码:
def Rotationversdroite(m,liste):
i = 0
x, y = 0, 0
z = m - 1
listebis = ([0]*(m) for i in range(m))
for x in range(m):
for y in range(m):
listebis[y][z-x] = liste[x][y]
return listebis
您正在使用生成器表达式将生成器分配给
listebis
变量。
更换
listebis = ([0]*(m) for i in range(m))
具有列表理解
listebis = [[0] * m for i in range(m)]
简而言之,生成器在迭代中使用(通常用于循环),与列表或元组非常相似,但不会一次存储迭代的每个值,这样可以节省内存空间。
当你写作时
listebis = ([0]*(m) for i in range(m))
它实际上并不执行循环并立即存储每个值,而是设置一个可以根据指定循环生成值的进程。
要运行循环并将结果存储在列表中,请将行更改为以下之一:
listebis = list([0]*(m) for i in range(m))
listebis = [[0]*(m) for i in range(m)] #square brackets instead of round
顺便说一句,您不必初始化 i、x 或 y,因为它们将在各自的 for 循环开始时初始化。