首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遇到两个单独的关键字后,中断for循环

遇到两个单独的关键字后,中断for循环
EN

Stack Overflow用户
提问于 2019-05-16 18:47:24
回答 3查看 74关注 0票数 3

假设我有如下文件:

代码语言:javascript
复制
apples  53 24
apples  23 56
apples  24 98
oranges 10 34
oranges 12 38

我想知道是否有办法只打印第一行包含“苹果”和第一行包含“桔子”。

注:编号。包含“苹果”和“橘子”的线条可能并不总是一样的。所以,我不能具体到一个行号。但是,包含“橙子”的行总是跟在含有“苹果”的行后面。

任何帮助都是非常感谢的。谢谢!

预期产出:

代码语言:javascript
复制
apples  53 24
oranges 10 34
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-16 18:52:34

给你:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2019-05-16 19:00:04

这对于itertools.groupby来说是一个很好的用途,只要您想要每个组中的第一个--换句话说,如果列表后面还有另一组苹果,它也会打印第一组苹果(在问题中不清楚这是否可能,或者应该发生什么),这样可以处理任意数量的组:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-05-16 18:52:27

你可以用itertools.dropwhile

代码语言:javascript
复制
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)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56174856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档