说我有一个如下文件:
apples 53 24
apples 23 56
apples 24 98
oranges 10 34
oranges 12 38
我想知道是否有一种方法可以只打印出包含“ apples”的第一行和包含“ oranges”的第一行
注意:否。包含“苹果”和“橙色”的行可能并不总是相同的。因此,我不能专门转到行号。但是包含“橙色”的行将始终跟随包含“苹果”的行
感谢您的帮助。谢谢!
预期输出:
apples 53 24
oranges 10 34
答案 0 :(得分:2)
您在这里:
with open(file) as fp:
seen = set([])
for line in fp:
token = line.split()[0]
if token not in seen:
seen.add(token)
print(line)
答案 1 :(得分:2)
这是itertools.groupby的一个很好的用法,只要您要每组中的第一个即可。换句话说,如果列表中稍后还有另一组苹果,它也会打印其中的第一个(在这个问题中不清楚(是否可能或应该发生什么))鉴于此,它应该处理任何数字组:
from itertools import groupby
with open('test.txt') as file:
for k, g in groupby(file, key=lambda x: x.split()[0]):
print(next(g).strip())
结果:
苹果53 24
橘子10 34
答案 2 :(得分:0)
您可以使用itertools.dropwhile
!
from itertools import dropwhile
with open("...") as f:
lines = iter(f)
print(next(lines)) # prints the first line
print(next(dropwhile(lambda line: line.startswith("apples"), lines)))