首页 > 解决方案 > 从 lambda 函数中修改数组是否是 pythonic/安全的?

问题描述

我有一个包含(5 位)邮政编码的熊猫系列。该系列中的一些(少数)元素实际上是具有多个邮政编码的字符串,由“/”分隔。我希望将这些特殊情况提取到一个数组中,以便稍后将它们添加到系列中。以下 lambda 函数有效:

other_zips = []
f = lambda s: other_zips.extend(s.split('/')) if '/' in s else s
zipcodes.apply(f)

然后我有一个 5 位数的邮政编码列表,我可以将其添加回原始系列。然而,这个解决方案对我来说似乎有点“臃肿”——尤其是这else s部分在语义上没有意义,但出于句法原因必须包含在内。

有没有更好的方法来达到相同的结果?从更广泛的意义上说,从 python 的 lambda 函数中操作外部值是一个好主意吗?

标签: pythonpandaslambda

解决方案


好吧,我认为最直接且因此更可取的代码如下所示。

other_zips = []
for zipcode in zipcodes:
    if "/" in zipcode:
        other_zips.extend(zipcode.split("/"))

如果你真的很喜欢单行,那么下面的列表理解是非常 Python 的,我认为很容易理解。

other_zips = [z for zipcode in zipcodes for z in zipcode.split("/") if "/" in zipcode]

我真的不喜欢你的代码,因为zipcodes.apply(f)除了zipcodes. 这一行读起来不像是实际构建 list 的那一行other_zips


推荐阅读