引言:面试的时候面试官出的这道题,当时写的不是太好,面试结束后下来查了一下,发现大部分的博客都是使用工具包来实现,而且大部分的博客内容还都完全一样,连数字都没有变,找了半天也没找到几个有用的博客。其实这也是现在大部分博客的风气,互相抄袭,没有一点自己的思考内容,我都不明白写这样的博客有什么意义。所以自己打算实现一个不使用工具包来解决的方法,于是在别人的博客帮助下,实现了用回溯法来解决笛卡尔乘积,下面是总结一下解决这个问题的几个方法:
1、工具包
from itertools import product
res = list(product(['a','b'],['c'],['d','e','g']))
print(res)
2、递归生成器,此方法参考的是 Python 用递归生成器计算笛卡尔积 | LFhacks.com 这个博客的内容,直接代码复制过来了
def combi(seq):
if not seq:
yield []
else:
for element in seq[0]:
for rest in combi(seq[1:]):
yield [element] + rest
用下面的代码测试
n=[[1,2,3],[4],[5,6,7]]
print list(combi(n))
运行方式为:
拆出第一个序列,得到1,2,3
对于1
Python实现笛卡尔乘积的几种方法

作者面试时遇到求笛卡尔乘积的问题,发现多数博客用工具包实现且内容抄袭。作者总结了几种解决方法,包括使用工具包、递归生成器和回溯法,还提到使用layer防止子列表为空列表的情况。
最低0.47元/天 解锁文章
3432

被折叠的 条评论
为什么被折叠?



