我想从python中的字符串列表中删除全部空字符串。 python
个人想法以下: spa
while '' in str_list: str_list.remove('')
有没有更多的Python方式能够作到这一点? code
代替if x,我将使用if X!=”来消除空字符串。 像这样: rem
str_list = [x for x in str_list if x != '']
这将在列表中保留“无”数据类型。 另外,若是您的列表包含整数,而且0是其中的一个,那么它也会被保留。 字符串
例如, get
str_list = [None, '', 0, "Hi", '', "Hello"] [x for x in str_list if x != ''] [None, 0, "Hi", "Hello"]
>>> lstr = ['hello', '', ' ', 'world', ' '] >>> lstr ['hello', '', ' ', 'world', ' '] >>> ' '.join(lstr).split() ['hello', 'world'] >>> filter(None, lstr) ['hello', ' ', 'world', ' ']
比较时间 string
>>> from timeit import timeit >>> timeit('" ".join(lstr).split()', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000) 4.226747989654541 >>> timeit('filter(None, lstr)', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000) 3.0278358459472656
请注意, filter(None, lstr)
不会删除空字符串用空格' '
,它只是修剪掉''
,而' '.join(lstr).split()
将同时删除。 it
要使用filter()
除去空格字符串,须要花费更多时间: io
>>> timeit('filter(None, [l.replace(" ", "") for l in lstr])', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000) 18.101892948150635
str_list = ['2', '', '2', '', '2', '', '2', '', '2', ''] for item in str_list: if len(item) < 1: str_list.remove(item)
简短而甜美。 import
filter(None, str)
不会删除空格为''的空字符串,它只会删除'和''。
join(str).split()
删除二者。 可是,若是您的list元素有空间,那么它将更改您的list元素,由于它首先链接了list的全部元素,而后按空格将它们吐出来,所以您应该使用:-
str = ['hello', '', ' ', 'world', ' '] print filter(lambda x:x != '', filter(lambda x:x != ' ', str))
它会同时删除这两个元素,而且不会影响您的元素,例如:-
str = ['hello', '', ' ', 'world ram', ' '] print ' '.join(lstr).split() print filter(lambda x:x != '', filter(lambda x:x != ' ', lstr))
输出:-
['hello','world','ram'] <--------------输出' '.join(lstr).split()
['hello','world ram']
strings = ["first", "", "second"] [x for x in strings if x]
输出: ['first', 'second']