Question

I would like to split a String by comma ',' and remove whitespace from the beginning and end of each split.

For example, if I have the string:

"QVOD, Baidu Player"

I would like to split and strip to:

['QVOD', 'Baidu Player']

Is there an elegant way of doing this? Possibly using a list comprehension?

Was it helpful?

Solution

Python has a spectacular function called split that will keep you from having to use a regex or something similar. You can split your string by just calling my_string.split(delimiter)

After that python has a strip function which will remove all whitespace from the beginning and end of a string.

[item.strip() for item in my_string.split(',')]

Benchmarks for the two methods are below:

>>> import timeit
>>> timeit.timeit('map(str.strip, "QVOD, Baidu Player".split(","))', number=100000)
0.3525350093841553
>>> timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))','stripper=str.strip', number=100000)
0.31575989723205566
>>> timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)
0.246596097946167

So the list comp is about 33% faster than the map.

Probably also worth noting that as far as being "pythonic" goes, Guido himself votes for the LC. http://www.artima.com/weblogs/viewpost.jsp?thread=98196

OTHER TIPS

A little functional approach. split function, splits the string based on , and the each and every element will be stripped by str.strip, by map.

>>> stripper = str.strip
>>> map(stripper, "QVOD, Baidu Player".split(","))
['QVOD', 'Baidu Player']

Little timing comparison

import timeit
stripper = str.strip
print timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))', "from __main__ import stripper", number=100000)
print timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)

Output on my machine

0.553178071976
0.569463968277

So, both the List comprehension method and map method perform almost the same.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top