摆脱列表中只包含空格的一些元素

时间:2013-04-22 16:32:47

标签: python list

[' ',' ',' ',' ', '12 21','12 34'] 我有一个这样的列表,其中前几个元素是任何数量的空白。如何删除仅包含空格的元素,以使列表变为['12 21', '12 34'] 这个列表比我刚刚缩小了很多,而且只包含空格的元素数量不是一个固定的数字。

6 个答案:

答案 0 :(得分:4)

使用str.strip()和简单的列表理解:

In [31]: lis=[' ',' ',' ',' ', '12 21','12 34']

In [32]: [x for x in lis if x.strip()]
Out[32]: ['12 21', '12 34']

或使用filter()

In [37]: filter(str.strip,lis)
Out[37]: ['12 21', '12 34']

这适用于空字符串:

In [35]: bool(" ".strip())
Out[35]: False

帮助(str.strip)

In [36]: str.strip?
Type:       method_descriptor
String Form:<method 'strip' of 'str' objects>
Namespace:  Python builtin
Docstring:
S.strip([chars]) -> string or unicode

Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.
If chars is unicode, S will be converted to unicode before stripping

答案 1 :(得分:4)

如果字符串完全是空白字符,str.isspace()方法将返回True,因此您可以使用以下内容:

lst = [x for x in lst if not x.isspace()]

答案 2 :(得分:2)

由于这是一个大型列表,您可能还需要考虑使用itertools,以便您可以忽略仅空白项而不是创建新列表:

>>> from itertools import ifilterfalse
>>> l = [' ',' ',' ',' ', '12 21','12 34']
>>> for item in ifilterfalse(str.isspace, l):
...     print item
... 
12 21
12 34

答案 3 :(得分:0)

  

如何删除仅包含空格的元素,以使列表变为['12 21', '12 34']

鉴于空白元素总是出现在列表的开头,那么......

如果您需要修改列表,最佳解决方案就是这样......

>>> l = [' ', ' ', ' ', ' ', '12 21','12 34']
>>> while l[0].isspace(): del l[0]
>>> print l
['12 21', '12 34']

...或者如果您只想迭代非空白元素,那么itertools.dropwhile()似乎是最有效的方法......

>>> import itertools
>>> l = [' ', ' ', ' ', ' ', '12 21','12 34']
>>> for i in itertools.dropwhile(str.isspace, l): print i
12 21
12 34

所有其他解决方案都会创建列表的副本和/或检查每个元素,这是不必要的。

答案 4 :(得分:0)

这是一种“功能性”的方式。

In [10]: a = [' ',' ',' ','12 24', '12 31']
In [11]: filter(str.strip, a)
Out[11]: ['12 24', '12 31']

这是filter的帮助。

  

模块内置

中内置函数过滤器的帮助      

过滤器(...)      过滤器(功能或无,序列) - &gt;列表,元组或字符串

     

返回函数(item)为true的序列项。如果      function为None,返回true的项。如果序列是一个元组      或者字符串,返回相同的类型,否则返回一个列表。

答案 5 :(得分:-1)

试试这个,

a=['','',1,2,3]
b=[x for x in a if x <> '']