正则表达式可调用迭代器获取长度

Inb*_*ose 1 python regex iterator

假设我有以下代码:

>>> a = re.finditer("(?P<char>\w)","hello world")
>>> for i in a:
    print i.groupdict()


{'char': 'h'}
{'char': 'e'}
{'char': 'l'}
{'char': 'l'}
{'char': 'o'}
{'char': 'w'}
{'char': 'o'}
{'char': 'r'}
{'char': 'l'}
{'char': 'd'}
Run Code Online (Sandbox Code Playgroud)

如您所见,有结果,一切都很棒!但是,我希望能够知道,len(a)所以我会这样做:

>>> len(a)
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    len(a)
TypeError: object of type 'callable-iterator' has no len()
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何获得 的长度a,或者更一般地说,我如何获得可调用迭代器的长度,以便我可以在解析它们之前知道是否有任何结果。

Mar*_*ers 7

您需要将可迭代对象转换为列表以获取长度:

len(list(a))
Run Code Online (Sandbox Code Playgroud)

请注意,这会消耗可迭代对象,因此您可能无法再次对其进行迭代。list(a)在调用len()它之前将结果存储在一个中介中,以便能够重用列表中的所有元素:

a = list(a)
len(a) 
Run Code Online (Sandbox Code Playgroud)

  • 如果 `list(a)` 消耗了太多内存而你真的只需要它的长度,请使用简单快速的 `sum(1 for j in a)`。 (4认同)
  • @InbarRose:这就是为什么 eumiro 说 *“你真的只需要它的长度”*。 (2认同)