python - 如何编写 Inline/Lambda 以追加或不追加到列表
问题描述
我觉得这是一个菜鸟问题,但我没有太多使用 lambda 函数,而且我在网上找不到我需要的东西。我想编写一个 lambda 函数,它将一个系列作为输入,并返回一个没有任何“None”的列表基本上我想要一个用于 followinf 函数的 lambda 函数:
def get_path(x):
toRet = []
for item in x.tolist():
if item is not None:
toret.append(item)
return toRet
是否有可能获得一个内联 lambda 函数来执行 get_path() 所做的事情。是的,我知道我可以执行以下操作:
lambda x: get_path(x)
它解决了这个问题,但我真的很想知道如何为此创建一个内联函数。
解决方案
正如其他人指出的那样,您可以使用filter()
但要注意为过滤检查提供的功能。
如果function是
None
,则假定恒等函数,即所有iterable为 false 的元素都被删除。
list(filter(None, something))
将无法正常工作,因为它也会过滤掉 False-ish 值,而不仅仅是None
. 例子:
>>> mylist = [1, 2, 3, 0, None, '', tuple(), 'last']
>>> list(filter(None, mylist)) # not the expected behaviour
[1, 2, 3, 'last']
OP 有一个明确的if item is not None
检查,而不仅仅是if item
- 所以两者是不等价的。只None
需要过滤掉。要获得正确的过滤行为,请对提供给过滤器的函数进行实际检查:
>>> list(filter(lambda i: i is not None, mylist))
[1, 2, 3, 0, '', (), 'last']
替换mylist
为x.tolist()
。当你把它放到一个 lambda 中时,它会变得一团糟:
get_path = lambda x: list(filter(lambda i: i is not None, x.tolist()))
而不是所有这些,列表理解选项更好:
get_path = lambda x: [i for i in x.tolist() if i is not None]
有明确的is not None
检查。
推荐阅读
- python - 如何根据特定模型字段创建模型属性?
- c++ - 带有 gso 的 UDP 没有收到整个消息
- excel - 总结字符串的数字前导部分
- c++ - 使用 boost 的 make_shared 指针初始化 PointLCloudT::Ptr 变量时出错
- swift - 使用baselineOffset设置NSAttributedString垂直居中每一行
- assembly - 强制 RIP 相对寻址?
- docker - Groovy sh 调用 docker build 正在向我的命令添加换行符
- sas - SAS中的转置数据集
- python-3.x - 用于根据另一列中的字符串删除列中不需要的字符串元素的 Pandas 或 Python 方法
- reactjs - 如何在 ReactJS 中存储、提交和复制表单中的输入到另一个组件