python - 从 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 函数中操作外部值是一个好主意吗?
解决方案
好吧,我认为最直接且因此更可取的代码如下所示。
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
。
推荐阅读
- qt - 使用“QWidget *QLayoutItem::widget()”会引发段错误(进入 qobjectdefs_impl.h)
- python - 如何用 distplot 绘制两个图例
- angular - Ionic 4 滑动项 getSlidingRatio 不是函数
- pouchdb - 有附件时 Pouchdb 不同步
- android - 如何从另一个活动或底页对话框/fragmenr 关闭一个活动
- corda - 可替代状态会自动合并到 Corda 上吗?
- asp-classic - 将 server.mappath 修改为其他内容,因为共享主机不允许父路径
- java - JLabel 中的泰语字体渲染
- amazon-web-services - 拒绝除特定范围之外的所有 IP 访问 AWS S3
- python - 如何切片将显示在 HTML 标记中的字符串值?