将连接字符串拆分为元组并忽略空字符串的最快方法

MLi*_*ter 12 python split

我有一个像这样的连接字符串:

my_str = 'str1;str2;str3;'
Run Code Online (Sandbox Code Playgroud)

我想将split函数应用于它然后将结果列表转换为元组,并删除由此产生的任何空字符串split(注意最后的';'到最后)

到目前为止,我这样做:

tuple(filter(None, my_str.split(';')))
Run Code Online (Sandbox Code Playgroud)

是否有更高效(在速度和空间方面)的方式来做到这一点?

Lev*_*von 12

这个怎么样?

    tuple(my_str.split(';')[:-1])
    ('str1', 'str2', 'str3')
Run Code Online (Sandbox Code Playgroud)

您将字符串拆分为字符串;,并将所有子字符串(除了最后一个,空字符串除外)传递给元组以创建结果元组.


Dav*_*ver 10

这是一种非常合理的方法.一些替代品:

  • foo.strip(";").split(";") (如果字符串中没有任何空切片)
  • [ x.strip() for x in foo.split(";") if x.strip() ] (从每个切片中去除空白)

"最快"的方法取决于很多事情......但你可以轻松地尝试ipython %timeit:

In [1]: foo = "1;2;3;4;"

In [2]: %timeit foo.strip(";").split(";")
1000000 loops, best of 3: 1.03 us per loop

In [3]: %timeit filter(None, foo.split(';'))
1000000 loops, best of 3: 1.55 us per loop