方法一:

a = ['\n    ', '1', '  ','Tuesday, May 05, 2020','\n']

我们需要将这个列表,中间有’\n ‘, ’ ‘,’\n’,这些都是我们不需要的,需要将其去掉。

list=[x.strip() for x in a]
运行会发现结果为

['', '1', '', 'Tuesday, May 05, 2020', '']

通过for循环将不需要的都转化为了空。

我们需要通过判断去除其中我们不需要的空

list = [x.strip() for x in a if x.strip()!='']

[‘1’, ‘Tuesday, May 05, 2020’]

总结:
这个种方法是通过strip(),将所有的空白符去除掉,变为'',然后再通过判断进行过滤。如果是单个字符我们也可以通过replace('\n', ''),进行替换,这种情况不适合不确定的列表,这种情况必须是你确定了都是'\n'.

方法二:

通过filter函数对空字符串进行判断,空字符串会被判定为False.
filter(None, your_list), None代表不输入函数,也就是[x for x in your_list if x],也可以是一个含参函数。

b = ['\n    ', '1', '  ','Tuesday, May 05, 2020','\n',None]

def not_empty(s):
    return s and s.strip()
c = filter(not_empty,b)
print(list(c))

结果:
[‘1’, ‘Tuesday, May 05, 2020’]
注意:filter会产生一个迭代器。<filter object at 0x00000208DAC98400>
我们需要获取结果可以使用List(c)

方法三:

通过while循环将空字符串移除。

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

总结

这三种方法都可以,但是推荐使用方法二,因为他的执行速度最快。
测试方法:


d = timeit.timeit("filter(None, your_list)", 'your_list= 10*["a", "b", "", "", "c", "", "d", "e", "f", "", "g"]', number = 1000)
print(‘方法二:’+d)
f = timeit.timeit("[x.strip() for x in your_list if x.strip()!='']", 'your_list= 10*["a", "b", "", "", "c", "", "d", "e", "f", "", "g"]', number = 1000)
print(“方法一:”+f)
h = timeit.timeit("while '' in your_list:your_list.remove('')", 'your_list= 10*["a", "b", "", "", "c", "", "d", "e", "f", "", "g"]', number = 1000)
print(“方法三:”+h)

结果:
方法二:0.0001010000000000004
方法一:0.011103700000000005
方法三:0.0006350000000000036

补充知识点:

Python中有三个去除头尾字符、空白符的函数,它们依次为:
strip: 用来去除头尾字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
lstrip:用来去除开头字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)

注意:这些函数都只会删除头和尾的字符,中间的不会删除。

用法分别为:
string.strip([chars])
string.lstrip([chars])
string.rstrip([chars])

参数chars是可选的,当chars为空,默认删除string头尾的空白符(包括\n、\r、\t、’ ')
当chars不为空时,函数会被chars解成一个个的字符,然后将这些字符去掉。

它返回的是去除头尾字符(或空白符)的string副本,string本身不会发生改变。

示例:

  1. 当chars为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
str = ' ab cd '

print(str.strip()) #删除头尾空格

print(str.lstrip()) #删除开头空格

print(str.rstrip()) #删除结尾空格

结果:
‘ab cd’
‘ab cd ’
’ ab cd’
2. 当chars不为空时,函数会被chars解成一个个的字符,然后将这些字符去掉

str2 = '1a2b12c21'
print(str2.strip('12')) #删除头尾的12

print(str2.lstrip('12')) #删除开头的12

print(str2.rstrip('12')) #删除结尾的12

结果:
‘a2b12c’
‘a2b12c21’

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐