遇到错误“生成器不可下标”

2024-06-07 09:13:27 发布

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

我实际上是想创建一个函数,将一个双向列表向左或向右旋转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

Tags: 方法函数答案in语言列表forrange
2条回答

简而言之,生成器在迭代中的使用(通常用于循环)与列表或元组非常类似,但不会一次存储迭代的每个值,这样可以节省内存空间。你知道吗

当你写作的时候

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循环的开始处初始化。你知道吗

您正在使用生成器表达式将生成器赋给listebis变量。你知道吗

替换

listebis = ([0]*(m) for i in range(m))

带着一份清单

listebis = [[0] * m for i in range(m)]

相关问题 更多 >

    热门问题