示例输入文件:
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]