【问题标题】:Unable to restrict loops to 21 lines无法将循环限制为 21 行
【发布时间】:2014-10-07 09:47:32
【问题描述】:

我正在尝试遍历列表。每行包含三个数字。该列表可以尽可能长,但我只想检查前 21 行。我尝试过使用 islice,但似乎无法正确使用。

from sys import argv
script, filename = argv

f = open(filename)

while True:
    line = f.readline()
    fields = line.split(" ")

    x = int(fields[0])
    y = int(fields[1])
    z = int(fields[2])

    for n in range(1, z):
        if n % x == 0 and n % y == 0:
            print "FB",
        elif n % x == 0:
            print "F",
        elif n % y == 0:
            print "B",
        else:
            print n,

    print line

    if not line:
        break

【问题讨论】:

    标签: python python-2.7 loops


    【解决方案1】:

    我不太清楚为什么你不能让islice 工作。使用它的一个工作示例是:

    import itertools
    
    with open(filename, "r") as f:
        for line in itertools.islice(f, 21):
            fields = line.split(" ")
            # Rest of your code here...
    

    这可能是最简单的解决方案,因为您无需在代码中引入额外的复杂性即可获得相同的结果。

    【讨论】:

      【解决方案2】:

      这不是很明显吗?

      ...
      
      lineNumber=1
      
      while True:
          line = f.readline()
          fields = line.split(" ")
      
          ...
      
          lineNumber = lineNumber +1
          if lineNumber > 21:
              break
      

      【讨论】:

        【解决方案3】:

        您也可以使用enumerate 来跟踪行号,但它从 0 开始,所以第一行是索引 0

        f = open(filename)
        
        for i, line in enumerate(f):
            fields = line.split(" ")
        
            x = int(fields[0])
            y = int(fields[1])
            z = int(fields[2])
        
            for n in range(1, z):
                if n % x == 0 and n % y == 0:
                    print "FB",
                elif n % x == 0:
                    print "F",
                elif n % y == 0:
                    print "B",
                else:
                    print n,
        
            print line
        
            if not line or i == 20:
                break
        

        如果没有行或行号等于20,第21行,则中断

        【讨论】:

        • 这就是为什么i < 21 看起来更好;) 你应该将检查移到循环的开头......
        • 你应该检查if not i <21if i >= 21恕我直言
        • 请注意,enumerate() 可以采用可选的第二个参数来指定开始计数的数字。
        【解决方案4】:

        您可以使用事实,即 zip 需要元素,直到其中一个可迭代对象用完为止:

        with open(filename) as f:
            for line, i in zip(f, range(21)):
                print line.strip()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-22
          • 1970-01-01
          • 1970-01-01
          • 2016-02-14
          • 1970-01-01
          • 2021-10-28
          相关资源
          最近更新 更多