Pythonic枚举while循环

Bit*_*ise 9 python while-loop

Python有一种在for循环中自动生成计数器变量的优雅方法:enumerate函数.这节省了初始化和递增计数器变量的需要.计数器变量也很难看,因为它们在循环完成后通常是无用的,但它们的范围不是循环的范围,因此它们不需要占用命名空间(尽管我不确定是否enumerate实际解决了这个问题).

我的问题是,是否存在类似于while循环的pythonic解决方案.因为返回一个迭代器,enumerate它将不适用于while循环enumerate.理想情况下,解决方案应该是"pythonic",不需要函数定义.

例如:

x=0
c=0
while x<10:
  x=int(raw_input())
  print x,c
  c+=1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们希望避免初始化和递增c.

澄清:

这可以通过for手动终止的无限循环来完成,正如一些人所建议的那样,但我正在寻找一种能够使代码更清晰的解决方案,并且我认为这种解决方案不会使代码更清晰.

mor*_*tar 7

对伊格纳西奥的回答有所改进(可读性,我会说):

x = 0
for c in itertools.takewhile(lambda c: x < 10, itertools.count()):
    x = int(raw_input())
    print x, c
Run Code Online (Sandbox Code Playgroud)

好处:

  • 只有while循环条件在循环头中,而不是副作用raw_input.
  • 循环条件可以取决于正常while循环可以的任何条件.没有必要"导入"引用到takewhile中的变量,因为它们已经在lambda范围中可见.此外,如果您愿意,它可以取决于计数,但不是在这种情况下.
  • 简化:枚举不再出现.


Ign*_*ams 6

再次与itertools......

import itertools

for c, x in enumerate(
    itertools.takewhile(lambda v: v < 10,
      (int(raw_input()) for z in itertools.count())
    )
  ):
  print c, x
Run Code Online (Sandbox Code Playgroud)