I will speculate that when processing re.findall output, it’s more consistent if all results are of the same type, string in this case. The return value is a list of tuples, whose elements are the matches from the various groups. In larger bodies of text, the call might well generate a list of more than one tuple. Expanding your input a bit:
In that case, why doesn’t findall return a list of Match objects as well?
list(RE_String.finditer(text) does this. There woudn’t be any need for finditer if findall returned Match objects (except saving memory). So I would guess there was a time when there was only findall, and no finditer.
That’s true for many/most/all(?) *iter functions and methods. That said, concrete implementation of iterators has been around now for about 25 years. PEP 234re.finditer was introduced in Python 2.2, but re.findall has been around since Python 1.5.2. See the 2.7 module docs.
(In retrospect, I think it did a disservice to newer users of Python to eliminate the little historical footnotes regarding additions or significant changes which happened in the pre-3.x days. Hopefully the 2.7 docs will remain available in perpetuity.)
Seems likely. The Python Documentation by Version page provides docs way back to the 1.4 version, even though probably (almost?) nobody is using that anymore. And the Ancient Releases page offers version 0.9.1 including documentation. (Oh hey it’s you )