如何将生成locx与locy的两个Python列表推导式合并为一行?
合并两个列表推导式为一行代码
当然可以,合并后还能避免两次遍历point_objects列表,提升执行效率。这里提供两种常用实现方式:
方式1:返回元组(无需额外转换)
self.locx, self.locy = zip(*((pobj.x, pobj.y) for pobj in point_objects))
zip(*...)会将生成器产出的(x,y)元组拆解,把所有x值聚合为一组、y值聚合为另一组,最终返回两个元组分别赋值给self.locx和self.locy。
方式2:返回列表(若需列表类型)
如果你的代码必须使用列表而非元组,可通过map(list, ...)完成类型转换:
self.locx, self.locy = map(list, zip(*((pobj.x, pobj.y) for pobj in point_objects)))
补充说明
这两种方式都仅遍历point_objects一次,相比原代码的两次列表推导式,在数据量较大时性能优势更明显。
内容的提问来源于stack exchange,提问作者Sunil Anandatheertha
相关产品推荐
相关产品推荐

