首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导航Callable-迭代器

导航Callable-迭代器
EN

Stack Overflow用户
提问于 2009-04-27 05:08:22
回答 1查看 9.3K关注 0票数 4

我想使用正则表达式从一些聊天日志中提取信息。被解析的字符串的格式是03:22:32 PM <b>blcArmadillo</b>。我使用python type()命令发现变量message是一个可调用迭代器。我的问题是,如何在可调用迭代器中最有效地导航?它们是否类似于只使用索引的数组?我能找到的“提取”数据的唯一方法是遍历返回值,并将它们添加到列表中,如下面的代码片段所示。

代码语言:javascript
复制
times = []
messages = re.compile(r'(?P<time>..:..:.. ..).*?<b>(?P<usrname>.*?):</b>').finditer(search)

for result in messages:
    times.append(result.group('time'))

有没有更好更有效的方法呢?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-27 05:19:34

迭代器只是一个带有next方法的对象。每次调用它时,它都会返回集合中的下一项。如果您需要访问任意索引,则几乎必须将其转换为列表。而不是这样:

代码语言:javascript
复制
for result in messages:
    times.append(result.group('time'))

你可以这样说:

代码语言:javascript
复制
times = [result.group('time') for result in messages]

这几乎做了同样的事情。但是,我应该警告您,对大型结果集执行此操作将非常缓慢,并且会消耗大量内存。因此,如果不需要随机访问,就不应该这样做。如果不受信任的用户输入的数据将决定将显示的结果数,您可能还希望限制他们可以输入的内容数。

编辑:我只是注意到我之前的答案和你发布的代码片段不太一样,所以我更新了它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/792304

复制
相关文章

相似问题

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