【问题标题】:How obtain a number what is repeated a n times?如何获得重复n次的数字?
【发布时间】:2020-12-14 14:35:06
【问题描述】:

我有一个包含很多数字的文件:

0.98
0.23
0.10
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
10.3
11.9
0.56
...

我想打印数字 0 连续重复 10 次的行数(至少)。考虑到上面的输入,输出将是:4(对于第 4 行,因为 0 es 连续重复了 10 次)。文件 list.txt 是一个巨大的文件。我是 Python 新手。如何删除以下脚本中的错误:

import ast
values = open("list.txt","r")
values = list(map(int, ast.literal_eval(values.read().strip())))
count=0
length=""
if len(values)>1:
    for i in range(1,len(values)):
       if values[i-1]==values[i]:
          count+=1
       else :
           length += values[i-1]+" repeats "+str(count)+", "
           count=1
    length += ("and "+values[i]+" repeats "+str(count))
else:
    i=0
    length += ("and "+values[i]+" repeats "+str(count))
print (length)

【问题讨论】:

  • "文件 list.txt 是一个巨大的文件" - 然后逐行执行。您是否对第一次出现(在本例中为第 4 行)或所有出现的模式感兴趣?
  • 我想逐行读取文件,当它发现一个数字 0 连续重复 10 次时停止,就这样,不管模式的所有出现。

标签: python file iteration processing-efficiency


【解决方案1】:
with open('consecutive.txt') as f:
    c = 0
    for i,line in enumerate(f):
        if float(line)==0.0:
            c+=1
            if c == 10:
                print(i-8)
                break
        else:
            c=0

输出

4

【讨论】:

    【解决方案2】:

    逐行读取和评估文件。如果找到模式,则循环中断,停止读取文件

    import ast
    count = 0
    lineNb = -1
    found = False # False by default
    with open("list.txt") as f:
        for i,line in enumerate(f): # loop over lines, one-by-one
            value = ast.literal_eval(line)
            if value == 0:
                if count == 0: # first occurrence
                    lineNb = i # set potential lineNb
                count += 1     # increment counter
                if count == 10: # desired condition
                    found = True # now we know we have found the pattern
                    break        # break the for loop
            else: # not 0
                count = 0 # reset counter
    
    print(found,lineNb) # (True,3) # lineNb is zero-based, 3 = 4th line
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2014-01-07
      相关资源
      最近更新 更多