在文本中查找数字簇

2024-04-25 09:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

假设一个文本文件包含以下数字:

1
2
3
4
8
10
20
22
30
40

如果在1-10的范围内有4个或更多匹配项,我想把它们打印出来。如果在21-30的范围内少于4个匹配项,则不应打印它。你知道吗

So the expected output should be 1, 2, 3, 4, 8 and 10, but not the others.

我输入了自己的代码:

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语句。我会看看我是否找不到答案,如果没有人找到,就把它贴在这里。:)


Tags: 文件thenumberoutputifsocount错误
2条回答

使用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)

一份清单怎么样?你知道吗

修剪不需要的数字:

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

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

相关问题 更多 >