如何在Python中精确循环N次?

4
例如,我需要调用readline 10次来读取一个文件。
with open("input") as input_file:
    for i in range(10):
        line = input_file.readline()
        # Process the line here

这是一种非常常见的技术,使用range来控制循环次数。唯一的缺点是:有一个未使用的i变量。
这是从Python中得到的最好的吗?有更好的想法吗?
附注:在Ruby中我们可以这样做:
3.times do
  puts "This will be printed 3 times"
end

这个界面设计优雅,非常清晰地表达了意图。


Python缺少该功能的原因之一是,当您编写可测试的代码时,实际上很少想要执行您所询问的操作。当然,这种情况会发生,但并不像编写所有其他循环那样频繁。 - kqr
提醒一下,将你的 Ruby 代码修改为 3.times do |x|,此时 x 相当于 Python 示例中的 i。正如 @poundifdef 所说,Ruby 只是将其隐藏了起来。 - sberry
4个回答

11

这几乎是循环特定次数的最佳选择。

一个常见的习惯用法是使用 for _ in ...,将 _ 表示为一种占位符。


已解决IDE警告问题,谢谢。 - Erica Kane

5

使用 itertools 中的 islice

from itertools import islice
with open("input", 'r') as input_file:
    for line in islice(input_file, 10):
        #process line

由于您可以直接迭代文件的行,因此无需调用input_file.readline()。请参阅itertools.islice的文档。


1

Python中没有等效的构造。

(顺便提一下,在Ruby示例中,仍然需要一个计数器!语言只是隐藏了它。也有可能解释器会生成多次重复这些行的字节码,而不是循环,但这不太可能。)


0

你已经提供的解决方案基本上是最好的。

然而,如果你真的想要,你可以使用生成器和iterslice将其抽象出来,这样你就不需要看到一个未使用的变量:

import itertools

def take(iterable, amount):
    return itertools.islice(iterable, 0, amount)

with open("inputfile.txt") as file:
    for line in take(file.readlines(), 3):
        print line

对于迭代循环,itertools.islice 是最好的解决方案,感谢分享。 - yegle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接