[英]Using filter(lambda, list) in python to clean data
检查x == ""
f = lambda x: x is not None and x != ""
您在这里不需要 lambda。 用这个:
lst = ['', 'abc', '', 'def', '', 1, 2, '']
list(filter(None, lst))
Output:
['abc', 'def', 1, 2]
您可以使用以下事实:
bool(None)
为False
bool("")
(空字符串)为False
bool("something")
(非空字符串)为True
>>> info = ['', 'abc', '', 'def', '', None]
>>> f = lambda x: bool(x)
>>> list(filter(f, info))
['abc', 'def']
您可以使用list comprehension
而不是filter
并获得更好的性能。
res = [elem for elem in Mylist if not elem in [None, '']]
基准:
from timeit import timeit
import random
Mylist = [random.choice(['',None,'a']) for _ in range(100)]
def check_bool():
f = lambda x: bool(x)
return list(filter(f, Mylist))
def lambda_if_else():
f = lambda x: x is not None and x != ""
return list(filter(f, Mylist))
def list_comprehension():
return [elem for elem in Mylist if not elem in [None, '']]
for func in [check_bool, lambda_if_else, list_comprehension]:
print(func.__name__, timeit(f"{func.__name__}()", globals=globals()))
print(list_comprehension() == lambda_if_else() == check_bool())
check_bool 21.95354559900079
lambda_if_else 19.536270918999435
list_comprehension 8.683593133999238
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.