遇到两个单独的关键字后打破for循环

时间:2019-05-16 18:47:25

标签: python

说我有一个如下文件:

apples  53 24
apples  23 56
apples  24 98
oranges 10 34
oranges 12 38

我想知道是否有一种方法可以只打印出包含“ apples”的第一行和包含“ oranges”的第一行

注意:否。包含“苹果”和“橙色”的行可能并不总是相同的。因此,我不能专门转到行号。但是包含“橙色”的行将始终跟随包含“苹果”的行

感谢您的帮助。谢谢!

预期输出:

apples  53 24
oranges 10 34

3 个答案:

答案 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)))