我想从python中的字符串列表中删除所有空字符串。
我的想法是这样的:
while '' in str_list:
str_list.remove('')
还有什么更python化的方法吗?
我想从python中的字符串列表中删除所有空字符串。
我的想法是这样的:
while '' in str_list:
str_list.remove('')
还有什么更python化的方法吗?
当前回答
请记住,如果您想在字符串中保留空白,您可能会使用某些方法无意中删除它们。 如果你有这个列表
['hello world', '', ", 'hello'] 你可能想要['hello world','hello']
首先修剪列表,将任何类型的空白转换为空字符串:
space_to_empty = [x.strip() for x in _text_list]
然后从列表中删除空字符串
space_clean_list = [x for x in space_to_empty if x]
其他回答
Filter实际上有一个特殊的选项:
filter(None, sequence)
它将过滤掉所有值为False的元素。这里不需要使用一个实际的可调用对象,比如bool, len等等。
它和map(bool,…)一样快
使用正则表达式和筛选器进行匹配
lstr = ['hello', '', ' ', 'world', ' ']
r=re.compile('^[A-Za-z0-9]+')
results=list(filter(r.match,lstr))
print(results)
你可以用这样的东西
test_list = [i for i in test_list if i]
其中test_list是要从中删除空元素的列表。
请记住,如果您想在字符串中保留空白,您可能会使用某些方法无意中删除它们。 如果你有这个列表
['hello world', '', ", 'hello'] 你可能想要['hello world','hello']
首先修剪列表,将任何类型的空白转换为空字符串:
space_to_empty = [x.strip() for x in _text_list]
然后从列表中删除空字符串
space_clean_list = [x for x in space_to_empty if x]
使用列表推导式是最python化的方式:
>>> strings = ["first", "", "second"]
>>> [x for x in strings if x]
['first', 'second']
如果列表必须就地修改,因为有其他引用必须看到更新的数据,那么使用slice赋值:
strings[:] = [x for x in strings if x]