如何使用Python列表推导式将指定for循环改写为单行实现
列表推导式改写实现
原多行for循环的等效单行列表推导式实现如下:
objects = [sku[i] for i, u in enumerate(lst) if u not in count for _ in [sku[i].pop("_id")]]
逻辑说明
- 代码完全对齐原有逻辑:遍历
lst时跳过存在于count中的元素,对符合条件的项,先弹出对应索引位置sku元素的_id字段,再将处理后的sku元素存入objects列表 - 嵌套的
for _ in [sku[i].pop("_id")]仅用于触发pop操作的副作用,不会改变最终存入列表的元素,完全规避了被弹出的_id值为真/假值导致结果异常的问题 - 无需提前初始化空的
objects列表,列表推导式执行完成后会直接返回组装好的结果 - 若
count为列表类型,建议先执行count = set(count)转为集合再运行代码,可将成员判断的时间复杂度从O(n)降至O(1),数据量较大时性能提升明显
注意:不要使用
sku[i].pop("_id") or sku[i]这类简化写法,当被弹出的_id字段为非0数字、非空字符串等真值时,会把_id值本身存入结果列表,和原逻辑预期不符。
内容的提问来源于stack exchange,提问作者Harshit Dubey
相关产品推荐
相关产品推荐

