从字符串列表中删除空字符串

我想从python中的字符串列表中删除全部空字符串。 python

个人想法以下: spa

while '' in str_list:
    str_list.remove('')

有没有更多的Python方式能够作到这一点? code


#1楼

代替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"]

#2楼

>>> 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

#3楼

str_list = ['2', '', '2', '', '2', '', '2', '', '2', '']

for item in str_list:
    if len(item) < 1:  
        str_list.remove(item)

简短而甜美。 import


#4楼

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']


#5楼

清单理解

strings = ["first", "", "second"]
[x for x in strings if x]

输出: ['first', 'second']

相关文章
相关标签/搜索