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