使用`itertools.groupby()`获取以`A`开头的字符串运行列表?

艾丽·罗斯(Eli Rose)

(抽象的)问题是这样的:我有一个日志文件

A: 1
A: 2
A: 3
B: 4
B: 5
A: 6
C: 7
D: 8
A: 9
A: 10
A: 11

我想以这样的列表结尾:

[["1", "2", "3"], ["6"], ["9", "10", "11"]]

其中文件已分解为以开头的字符串“运行” A我知道可以用它itertools.groupby来解决这个问题,现在我有了这个解决方案(f文件中各行的列表)。

starts_with_a = lambda x: x.startswith("A")
coalesced = [g for _, g in groupby(f), key=starts_with_a]
runs = [re.sub(r'A: ', '', s) for s in coalesced if starts_with_a(s)]

因此,我使用了groupby,但是随后我必须过滤掉不以“ A”开头的内容。没关系,而且很简洁,但是有没有更优雅的方法呢?我喜欢这样一种方式:

  • 不需要两次通过
  • 更(和/或)更易读

帮我驾驭itertools

马丁·彼得斯(Martijn Pieters)

是的,过滤掉不是以开头的行,A而是使用为返回的每个组生成groupby()它是key函数的返回值,因此True适用于以开头的行A我将str.partition()在这里使用而不是正则表达式:

coalesce = (g for key, g in groupby(f, key=lambda x: x[:1] == "A") if key)
runs = [[res.partition(':')[-1].strip() for res in group] for group in coalesce]

由于您的str.startswith()参数是固定宽度的字符串文字,因此您也可以使用切片。x[:1]将第一个字符切成薄片并与之进行比较'A',这使您与进行相同的测试x.startswith('A')

我使用生成器表达式对groupby()过滤进行分组可以将其内联到一个列表理解中:

runs = [[res.partition(':')[-1].strip() for res in group]
        for key, group in groupby(f, key=lambda x: x[:1] == "A") if key]

演示:

>>> from itertools import groupby
>>> f = '''\
... A: 1
... A: 2
... A: 3
... B: 4
... B: 5
... A: 6
... C: 7
... D: 8
... A: 9
... A: 10
... A: 11
... '''.splitlines(True)
>>> coalesce = (g for key, g in groupby(f, key=lambda x: x[:1] == "A") if key)
>>> [[res.partition(':')[-1].strip() for res in group] for group in coalesce]
[['1', '2', '3'], ['6'], ['9', '10', '11']]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用itertools.groupby

来自分类Dev

使用 itertools groupby 从分类列表中获取索引值

来自分类Dev

使用itertools将元组分组的列表

来自分类Dev

使用itertools库获取对象组合?

来自分类Dev

如何使用itertools.groupby格式化字典列表?

来自分类Dev

如何通过使用itertools模块获取排序列表中的下一个按字典顺序更大的字符串?

来自分类Dev

如何使用IterTools在Unicode字符串中生成所有字符排列(Python)

来自分类Dev

使用itertools [python]在旧索引处的字符串中插入字符

来自分类Dev

如何使用IterTools在Unicode字符串中生成所有字符排列(Python)

来自分类Dev

我可以使用 itertools.groupby 返回第一行以特定字符开头的行组吗?

来自分类Dev

在不使用itertools的情况下在Python中生成字符串的所有排列

来自分类Dev

在不使用itertools的情况下在Python中生成字符串的所有排列

来自分类Dev

在不使用itertools的情况下在Python中生成字符串的所有排列

来自分类Dev

使用 itertools.compress 基于二进制序列过滤字符串

来自分类Dev

Python的itertools.groupby()文档中使用的keyfunc是什么?

来自分类Dev

如何通过true / false lambda函数使用itertools.groupby

来自分类Dev

如何使用列表列表调用itertools.pruduct函数

来自分类Dev

使用itertools.cycle()在多个列表之间循环

来自分类Dev

Python-使用itertools生成二进制列表

来自分类Dev

转换嵌套列表推导以在python中使用itertools链

来自分类Dev

Python 使用 itertools 按三个列表分组

来自分类Dev

如何使用聚合管道来查看哪些文档的字段包含以列表中任何字符串开头的字符串?

来自分类Dev

如何获取格式字符串中使用的名称列表?

来自分类Dev

我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合

来自分类Dev

JS使用以字符串开头的键获取对象的值

来自分类Dev

使用 Python Regex 获取以某个单词开头的字符串直到行尾

来自分类Dev

在itertools.groupby的结果上使用zip意外给出空列表

来自分类Dev

如何在使用 itertools.groupby 删除重复项时包含每个字符的计数

来自分类Dev

如何使用itertools.zip_longest在嵌套列表中获取值

Related 相关文章

  1. 1

    使用itertools.groupby

  2. 2

    使用 itertools groupby 从分类列表中获取索引值

  3. 3

    使用itertools将元组分组的列表

  4. 4

    使用itertools库获取对象组合?

  5. 5

    如何使用itertools.groupby格式化字典列表?

  6. 6

    如何通过使用itertools模块获取排序列表中的下一个按字典顺序更大的字符串?

  7. 7

    如何使用IterTools在Unicode字符串中生成所有字符排列(Python)

  8. 8

    使用itertools [python]在旧索引处的字符串中插入字符

  9. 9

    如何使用IterTools在Unicode字符串中生成所有字符排列(Python)

  10. 10

    我可以使用 itertools.groupby 返回第一行以特定字符开头的行组吗?

  11. 11

    在不使用itertools的情况下在Python中生成字符串的所有排列

  12. 12

    在不使用itertools的情况下在Python中生成字符串的所有排列

  13. 13

    在不使用itertools的情况下在Python中生成字符串的所有排列

  14. 14

    使用 itertools.compress 基于二进制序列过滤字符串

  15. 15

    Python的itertools.groupby()文档中使用的keyfunc是什么?

  16. 16

    如何通过true / false lambda函数使用itertools.groupby

  17. 17

    如何使用列表列表调用itertools.pruduct函数

  18. 18

    使用itertools.cycle()在多个列表之间循环

  19. 19

    Python-使用itertools生成二进制列表

  20. 20

    转换嵌套列表推导以在python中使用itertools链

  21. 21

    Python 使用 itertools 按三个列表分组

  22. 22

    如何使用聚合管道来查看哪些文档的字段包含以列表中任何字符串开头的字符串?

  23. 23

    如何获取格式字符串中使用的名称列表?

  24. 24

    我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合

  25. 25

    JS使用以字符串开头的键获取对象的值

  26. 26

    使用 Python Regex 获取以某个单词开头的字符串直到行尾

  27. 27

    在itertools.groupby的结果上使用zip意外给出空列表

  28. 28

    如何在使用 itertools.groupby 删除重复项时包含每个字符的计数

  29. 29

    如何使用itertools.zip_longest在嵌套列表中获取值

热门标签

归档