【问题标题】:How to loop exact N times in Python? [duplicate]如何在 Python 中精确循环 N 次? [复制]
【发布时间】:2013-10-24 02:50:59
【问题描述】:

例如,我需要调用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 缺少该功能的一个原因是,当您编写可测试的代码时,实际上很少想做您所要求的事情。当然,它会发生,但不如所有其他正在编写的循环那么多。
  • 仅供参考,将您的 Ruby 更改为 3.times do |x| 并且 x 现在等同于您的 Python 示例中的 i。就像@poundifdef 所说,Ruby 只是对你隐藏它。

标签: python loops


【解决方案1】:

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

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

【讨论】:

  • 消除了 IDE 警告,谢谢。
【解决方案2】:

python 中没有等效的构造。

(顺便说一句,即使在 Ruby 示例中,仍然需要一个计数器!该语言只是将它隐藏起来。解释器也可能生成字节码,其中这些行重复多次,而不是循环,但这不太可能。)

【讨论】:

    【解决方案3】:

    您已经提供的解决方案几乎是最好的解决方案。

    但是,如果您真的想这样做,您可以使用生成器和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 是最好的解决方案,谢谢分享。
    【解决方案4】:

    使用来自itertoolsislice

    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 的文档

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2020-01-10
      • 2019-09-29
      • 1970-01-01
      • 2017-10-13
      • 2021-01-25
      • 2017-07-22
      • 2010-10-30
      • 2016-04-30
      相关资源
      最近更新 更多