簡體   English   中英

Python:在while循環中獲取索引

[英]Python: get the index in a while loop

我確實有一個while循環沒有迭代:

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循環中當前步驟的索引?

更新:既然你編輯的帖子,下面的答案是不相關了。 我認為最簡單的解決方法就是堅持使用while循環; 只是增加了兩行代碼(在那又是一小段)。 如果您提供有關x0遞減的函數/值的更多信息,也許我們可以找到一個包含列表/生成器的巧妙解決方案,以便可以使用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)

但這可能僅適用於功能編程迷:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM