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

时间:2012-09-10 12:13:54

标签: 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'}

正如您所看到的,有结果,一切都很棒!但是,我希望能够知道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()

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

1 个答案:

答案 0 :(得分:4)

您需要将iterable转换为列表以获取长度:

len(list(a))

请注意,此消耗可迭代的内容,因此您可能无法再次迭代它。将list(a)结果存储在中介中,然后在其上调用len(),以便能够重复使用列表中的所有元素:

a = list(a)
len(a)