导航可调用迭代器

5 投票
1 回答
11947 浏览
提问于 2025-04-15 11:16

我想用正则表达式从一些聊天记录中提取信息。这些字符串的格式是 03:22:32 PM <b>blcArmadillo</b>。我用 Python 的 type() 命令发现变量 messages 是一个可调用的迭代器。我的问题是,如何高效地遍历这个可调用的迭代器?它们像数组一样可以用索引访问吗?我找到的唯一“提取”数据的方法就是循环遍历返回的值,然后把它们添加到一个列表中,下面的代码片段展示了这个过程。

times = []
messages = re.compile(r'(?P<time>..:..:.. ..).*?<b>(?P<usrname>.*?):</b>').finditer(search)

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

有没有更好更有效的方法来做到这一点呢?谢谢你的帮助。

1 个回答

6

迭代器就是一个有“下一个”方法的对象。每次你调用这个方法,它都会返回集合中的下一个项目。如果你想访问特定的索引,那基本上就得把它转换成一个列表。比如说,你不能这样做:

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

不过你可以这样做:

times = [result.group('time') for result in messages]

这样做的效果差不多。但是,我得提醒你,如果结果集很大,这样做会非常慢,而且会占用很多内存。所以,如果你不需要随机访问,就不要这样做。如果用户输入的数据会影响结果的数量,你可能还需要限制他们可以输入的数量。

编辑:我刚发现我之前的回答和你发的代码片段不完全一样,所以我更新了一下。

撰写回答