python - 任意嵌套列表的过滤函数

标签 python python-2.7 list lambda functional-programming

由于双重条件,我不知道如何将此函数编写为 lambda:

def f(e):
    if not isinstance(e,list):
        if e >10:
            return e
    else:
        return filter(None,[f(y) for y in e])
my_list=[[1], [2,[3,12, [4,11,12]]], [5,6,13,14],[15]]

>>> f(my_list)
[[[12, [11, 12]]], [13, 14], [15]]

另外,pythonic 的方式是什么来编写这样一个过滤任意嵌套列表的函数?

最佳答案

首先,通过 def 将过滤或映射函数定义为常规函数并没有错,如果这对可读性有好处的话 - 记住 "Readability counts" and "Sparse is better than dense" .仅仅因为语言中有内联 lambda 函数,并不意味着您必须将逻辑挤入其中。

由于您最终想要为任意列表深度构建一个通用解决方案,您可以通过map()递归地应用过滤函数 + filter()删除 None 值:

def filter_function(e):
    if isinstance(e, list):
        return filter(None, map(filter_function, e))
    elif e > 10:
        return e

my_list = list(filter_function(my_list))  

请注意,Python 3.x 需要 list(),因为 filter() does not return a list .


演示:

>>> my_list = [[1], [2, [3, 12, [4, 11, 12]]], [5, 6, 13, 14], [15]]
>>> 
>>> def filter_function(e):
...     if isinstance(e, list):
...         return filter(None, map(filter_function, e))
...     elif e > 10:
...         return e
... 
>>> 
>>> print(list(filter_function(my_list)))
[[[12, [11, 12]]], [13, 14], [15]]

关于python - 任意嵌套列表的过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41314144/

相关文章:

python检测超出范围的颜色

python 字符串每两个字符到字节 - 快速完成

python - 在字典中压缩两个列表,但在键中保留重复项

python - pandas.DataFrame.copy(deep=True) 实际上并没有创建深拷贝

python - 字典列表,在字典中 - 在 Python 中

c# - 从多个单独列表中匹配 'pair up' 项目的最快非 LINQ 算法是什么?

python - 根据近似或精确匹配合并两个 Pandas DataFrame

Python pysqlite2 dbapi2问题

python - 如何解码编码的种子数据

python - 改进网络摄像头代码的建议