Python:选择满足条件的指数范围



示例输入文件:

index   score
1       0.2
3       0.4
7       1.5
13      1.8
22      1.9
25      1.6
30      0.5
31      0.2
43      1.5
45      1.6
50      0.3
61      0.1

我想做的是生产某些东西,其中具有分数> = 1的区域的最小索引和最大索引在同一条线上打印出来:

min     max
7       25
43      45

我试图使用for循环将输入线划分为段循环,该循环检查第二个元素是否> = 1,但我会感到困惑。任何帮助都非常感谢。谢谢你!

这是我的尝试

while lp[1] >= 1:  
     for line in file:  
     lp = line.split()  
           if lp[1] >= 1:  
           print(lp[0])  

一种更简单的方法是使用 itertools.groupby

from itertools import groupby
with open('abc1') as f:
    for k, g in groupby(f, key=lambda x:float(x.split()[1]) >= 1):
        if k:
            minn = next(g)
            for maxx in g: pass
            print minn, maxx
...             
7       1.5
25      1.6
43      1.5
45      1.6

当然,上面的代码在范围1的长度为1的情况下不起作用,我将留给您解决。

lines = []
with open("this_file.txt", "r") as f:
    for l in f.readlines()[1:]:
        a, b = l.split()
        lines.append( (int(a), float(b) )
bigger_than_one = [ pair for pair in lines if pair[1]>=1. ]
print("min", *min(bigger_than_one, key= lambda x: x[1]))
print("max", *max(bigger_than_one, key= lambda x: x[1]))

未经测试,但您应该有一个想法。

谢谢你们俩,我从您的答案中学到了一些东西。我最终写了这个:

previousScore = 0
previousID = ""
offpeak = True
for line in file:
        lp = line.split()
        if float(lp[1]) >= 1 and offpeak:
                print(lp[0]) 
                offpeak = False
        if float(lp[1]) <= 1 and previousScore >=1:
                print(previousID) 
                offpeak = True
        previousScore = float(lp[1])
        previousID = lp[0]

最新更新