Fastest way to split a concatenated string into a tuple and ignore empty strings
How about this?
tuple(my_str.split(';')[:-1])
('str1', 'str2', 'str3')
You split the string at the ;
character, and pass all off the substrings (except the last one, the empty string) to tuple to create the result tuple.
That is a very reasonable way to do it. Some alternatives:
foo.strip(";").split(";")
(if there won't be any empty slices inside the string)[ x.strip() for x in foo.split(";") if x.strip() ]
(to strip whitespace from each slice)
The "fastest" way to do this will depend on a lot of things… but you can easily experiment with ipython's %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