Python3 split()与生成器

时间:2012-05-23 22:25:56

标签: python-3.x

在Python3中,许多方法都返回迭代器或生成器对象(而不是python2中的列表或其他重型对象)。

但是,我发现拆分字符串仍会返回list而不是generatoriteator

~$ python3
Python 3.2.2
(...)
>>> type('a b c d'.split())
<class 'list'>

是否存在使用generatoriterator分割字符串的内容?

(我知道我们可以自己拆分它并编写好的生成器函数。我很好奇是否有标准库或语言中的东西来执行此操作)

2 个答案:

答案 0 :(得分:3)

从re module =&gt;中查看re.finditer Python Docs

简而言之:

“”” 返回一个迭代器,在字符串中的RE模式的所有非重叠匹配上产生匹配对象。从左到右扫描字符串,并按找到的顺序返回匹配项。结果中包含空匹配,除非它们触及另一个匹配的开头。 “”“

我认为它会做你需要的。例如:

import re
text = "This is some nice text"
iter_matches = re.finditer(r'\w+', text)
for match in iter_matches:
    print(match.group(0))

答案 1 :(得分:0)

基于正则表达式的答案很小,但对于那些仍然是新手的人来说, 并想写一个,这是一种方法:

import string

def gsplit(s,sep=string.whitespace):
    word = []

    for c in s:
        if c in sep:
            if word:
                yield "".join(word)
                word = []
        else:
            word.append(c)

    if word:
        yield "".join(word)
       

text = "This is some nice text"

print(type(gsplit(text)))

for i in (gsplit(text)):
    print(i)
<class 'generator'>
This
is
some
nice
text

[Program finished]