Python:在while循环中获取索引

2024-06-16 08:54:50 发布

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

我确实有一个while循环,没有iterable:

n = 0 
while x0 > xmin:
    xy.createSomeCube(x0,y0,z0,x1,y1,z1)
    xy.someCube(n).setSomeParameters(dx,dy,dz)

    ...

    x0 -= someDecrement(someArgument)

    ...

    n += 1

有没有一种优雅的方法可以省略n = 0n += 1并在while循环中获得当前步骤的索引?你知道吗


Tags: iterablexminx1xywhiledyy1dx
2条回答

更新:由于您编辑了帖子,下面的答案不再相关。我认为最简单的解决方案是只使用while循环;它只需要添加两行代码(以及短代码)。如果您提供有关x0递减的函数/值的更多信息,也许我们可以找到一个巧妙的解决方案,使用列表/生成器,以便使用for循环。你知道吗

上一页:

将其转换为for循环:

for n,i in enumerate(range(x0, xmin, -abc)):
    xy.createSomeCube(i,y0,z0,x1,y1,z1)
    xy.someCube(n).setSomeParameters(dx,dy,dz)

i包含上一次的x0,每次迭代它都会减少abc。你知道吗

enumerate将索引与生成的列表中的项合并,因此n在每次迭代时都有当前索引。你知道吗

编辑:正如Roger Fan所指出的,只有当x0xminabc是整数时,这才有效。否则,您将不得不使用while循环。你知道吗

可以将半无限范围与itertools.count一起使用:

for n in itertools.count(0):
    if x0 <= xmin:
        break
    xy.createSomeCube(x0,y0,z0,x1,y1,z1)
    xy.someCube(n).setSomeParameters(dx,dy,dz)

    ...

    x0 -= someDecrement(someArgument)

你也可以用

from itertools import count, takewhile
for n in takewhile(lambda _: x0 < xmin, count(0)):
    xy.createSomeCube(x0,y0,z0,x1,y1,z1)
    xy.someCube(n).setSomeParameters(dx,dy,dz)

    ...

    x0 -= someDecrement(someArgument)

但这可能只适用于函数式编程爱好者:)

相关问题 更多 >