在文本文件中查找数字簇

时间:2019-03-07 17:10:41

标签: python python-3.x

我已经搜索了这个问题,但是也许我一直在搜索错误的单词,所以我添加了自己的单词:

我希望从文件中读取数字,并找出给定范围内是否有X个数字。举个例子:

想象一个具有以下数字的文本文件:

1
2
3
4
8
10
20
22
30
40

如果有4个或更多符合1-10的匹配项,我想将它们打印出来。如果少于21个匹配项,例如21-30,则不应打印该匹配项。

  

因此,预期输出应为1、2、3、4、8和10,但不应为   其他人。

我输入了自己的代码:

file = "text.txt"
count = 0

with open(file, 'r') as file:
        for number in file:
            if 0 <= int(number) <= 10:
                print(number)
                count += 1
if count >= 4:
    print("Found numbers: " + str(count))

这可以按照我想要的方式工作,但是仅当我读取的文件少于10个数字时才可以。我当然可以用几个“ Count2”“ Count3”等扩展它,但是我希望它能够读取任何长度的文件。 我正在努力寻找一个很好的解决方案,以解决如何使用100个以上的数字的问题,因为在这种情况下,我将不得不编写大量的if语句。如果没有其他答案,我将查看是否找不到答案并将其发布在此处。 :)

2 个答案:

答案 0 :(得分:1)

使用groupby怎么样? :

from itertools import groupby

def load_numbers(file):
    with open(file, 'r') as h:
        for line in h:
            yield int(line)

def group_numbers(numbers):
    return groupby(numbers, key=lambda n: (n-1)//10)

groups = group_numbers(load_numbers('text.txt'))
for _, elements in groups:
    elements = list(elements)
    if len(elements) >= 4:
        print(elements)

答案 1 :(得分:0)

列表理解如何?

修剪不需要的数字:

minimum = 0
maximum = 10
trimmed = [x for num in file if minimum <= x <= maximum]

if len(trimmed) >= 4:
   print(trimmed)