我已经搜索了这个问题,但是也许我一直在搜索错误的单词,所以我添加了自己的单词:
我希望从文件中读取数字,并找出给定范围内是否有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语句。如果没有其他答案,我将查看是否找不到答案并将其发布在此处。 :)
答案 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)