DFS wrote: > Have: list1 = ['\r\n Item 1 ',' Item 2 ','\r\n '] > Want: list1 = ['Item 1','Item 2'] > > > I wrote this, which works fine, but maybe it can be tidier? > > 1. list2 = [t.replace("\r\n", "") for t in list1] #remove \r\n > 2. list3 = [t.strip(' ') for t in list2] #trim whitespace > 3. list1 = filter(None, list3) #remove empty items > > > After each step: > > 1. list2 = [' Item 1 ',' Item 2 ',' '] #remove \r\n > 2. list3 = ['Item 1','Item 2',''] #trim whitespace > 3. list1 = ['Item 1','Item 2'] #remove empty items > > > Thanks!
s.strip() strips all whitespace, so you can combine steps 1 and 2: >>> items = ['\r\n Item 1 ',' Item 2 ','\r\n '] >>> stripped = (s.strip() for s in items) The (...) instead of [...] denote a generator expression, so the iteration has not started yet. The final step uses a list comprehension instead of filter(): >>> [s for s in stripped if s] ['Item 1', 'Item 2'] That way the same code works with both Python 2 and Python 3. Note that you can iterate over the generator expression only once; if you try it again you'll end empty-handed: >>> [s for s in stripped if s] [] If you want to do it in one step here are two options that both involve some duplicate work: >>> [s.strip() for s in items if s and not s.isspace()] ['Item 1', 'Item 2'] >>> [s.strip() for s in items if s.strip()] ['Item 1', 'Item 2'] -- https://mail.python.org/mailman/listinfo/python-list