如何替换列表推导式中的嵌套for循环?
替代嵌套循环实现笛卡尔积的方法
当然可以,你可以借助Python标准库中的itertools.product来移除列表推导式里的嵌套for循环,实现完全一致的笛卡尔积组合效果,代码更简洁直观。
实现代码
import itertools # id列表 id_list = [ 1, # UAE1S 2, # UAE2S 3, # UAE3S ] # status列表 status_list = [ 'okay', 'not okay', 'unknown', ] # 用itertools.product生成笛卡尔积,再转成目标字典结构 result = [{'id': idx, 'status': st} for idx, st in itertools.product(id_list, status_list)] print(result)
说明
itertools.product(id_list, status_list)会直接生成两个列表所有元素的配对元组(比如(1, 'okay')、(1, 'not okay')等),相当于替你完成了嵌套循环的逻辑。之后用单层列表推导式把每个元组转换成你需要的字典结构,最终输出结果和你原来的代码完全一致。
如果你偏好更函数式的写法,也可以用map配合lambda,但可读性稍差:
result = list(map(lambda pair: {'id': pair[0], 'status': pair[1]}, itertools.product(id_list, status_list)))
总体来说,itertools.product是处理笛卡尔积场景的标准方案,能让代码更简洁易读,尤其是当需要组合更多列表时,优势会更明显。
内容的提问来源于stack exchange,提问作者Prosy A.
相关产品推荐
相关产品推荐

