Scala中如何将两个列表合并为笛卡尔积形式的元组列表?
两个列表笛卡尔积的简洁实现
完全不需要手写冗余的多层嵌套循环,有两种非常简便的实现方式:
- 用标准库
itertools.product(性能最优,写法最简洁)
这是计算笛卡尔积的正统实现,属于Python标准库自带功能,不需要安装第三方依赖:
执行后得到的from itertools import product list1 = [1, 2, 3] list2 = ["a", "b"] list3 = list(product(list1, list2))list3和预期结果完全一致。因为product返回的是惰性迭代器,所以需要用list()转成实体列表;如果只是要遍历结果,甚至可以不用转换,直接在for循环里调用,内存效率更高。这个方法还支持传入任意多个可迭代对象,计算多个列表的笛卡尔积直接往参数里追加对应对象即可。 - 用列表推导式(零导入)
如果不想引入模块,直接写双层遍历的列表推导式即可,逻辑直白:
运行结果和上面的方法完全相同,本质就是两层for循环的简写形式,对于长度不大的列表来说完全够用。list3 = [(item1, item2) for item1 in list1 for item2 in list2]
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

