导航可调用迭代器

blc*_*llo 4 python

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

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

for result in messages:
    times.append(result.group('time'))
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ker 5

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

for result in messages:
    times.append(result.group('time'))
Run Code Online (Sandbox Code Playgroud)

你可以这样说:

times = [result.group('time') for result in messages]
Run Code Online (Sandbox Code Playgroud)

这几乎是一样的。但是,我应该警告您,对大型结果集执行此操作会非常缓慢,并且会占用大量内存。因此,如果您不需要随机访问,则不应这样做。如果不受信任的用户输入的数据将决定将出现多少结果,您可能还想限制他们可以输入的内容数量。

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