English 中文(简体)
“在天上”(例如发电机)分裂如分裂(),但Python 3没有常规表达式
原标题:"on-the-fly" (e.g. generator) splitting like split() but without regular expressions in Python 3

与前一个问题有关: Python3 和发电机 分开()

是否有一种方法使用生成器或迭代器分割列表, 但比创建正则表达式更有效?

我想". split ()" 并不是用常规表达式执行的 。

我很想看到相等的, 但不要在记忆中创建完整的分裂列表, 但“在空中”与发电机或迭代器。

问题回答

这似乎比正则要快一点:

def itersplit2(s, sep):
    i = 0
    l = len(sep)
    j = s.find(sep, i)
    while j > -1:
        yield s[i:j]
        i = j + l
        j = s.find(sep, i)
    else:
        yield s[i:]

但10倍于 str.split

以下是与 None 不同的分隔符版本 :

def iter_split(s, sep):
    start = 0
    L = len(s)
    lsep = len(sep)
    assert lsep > 0
    while start < L:
        end = s.find(sep, start)
        if end != -1:
            yield s[start:end]
            start = end + lsep
            if start == L:
                yield       # sep found but nothing after
        else:
            yield s[start:] # the last element
            start = L       # to quit the loop

我没有认真测试它, 所以它可能包含一些错误。 与 < code>str.split () 相比的结果 :

sep =  <> 
s =  1<>2<>3 
print( -------------- , repr(s), repr(sep))
print(s.split(sep))
print(list(iter_split(s, sep)))

s =  <>1<>2<>3<> 
print( -------------- , repr(s), repr(sep))
print(s.split(sep))
print(list(iter_split(s, sep)))

sep =    
s =  1 2 3 
print( -------------- , repr(s), repr(sep))
print(s.split(sep))
print(list(iter_split(s, sep)))

s =  1   2   3 
print( -------------- , repr(s), repr(sep))
print(s.split(sep))
print(list(iter_split(s, sep)))

它显示:

--------------  1<>2<>3   <> 
[ 1 ,  2 ,  3 ]
[ 1 ,  2 ,  3 ]
--------------  <>1<>2<>3<>   <> 
[  ,  1 ,  2 ,  3 ,   ]
[  ,  1 ,  2 ,  3 ,   ]
--------------  1 2 3     
[ 1 ,  2 ,  3 ]
[ 1 ,  2 ,  3 ]
--------------  1   2   3     
[ 1 ,   ,   ,  2 ,   ,   ,  3 ]
[ 1 ,   ,   ,  2 ,   ,   ,  3 ]

默认 < code> noone 分隔符的安装将更加复杂,因为有更多的规则。

总之, 预编的正则表达式相当有效 。 当写入时它们容易出错, 但一旦准备好, 它们就会快速 。





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签