簡體   English   中英

在 python 中使用 filter(lambda, list) 來清理數據

[英]Using filter(lambda, list) in python to clean data

我正在將網站作為一個項目進行網絡抓取。 我目前正在清除數據。 我有一個包含一些信息/句子的列表,但有些是空的,我想刪除它們。

我的想法是創建一個 lambda function 來標識 null 和非空值以返回 False 或 True。 然后我會將這個 function 放在 filter() 方法中並將其傳遞給我的列表。 因此 filter() 將應用 function 並從列表中刪除空字符串。

在此處輸入圖像描述

檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM