栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否有找到2个列表的唯一组合的算法?5个清单?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有找到2个列表的唯一组合的算法?5个清单?

也许您正在寻找itertools.product:

#!/usr/bin/env pythonimport itertoolsa=[1,2]b=['a','b']c=[str(s)+str(t) for s,t in itertools.product(a,b)]print(c)['1a', '1b', '2a', '2b']v=[1,'a']w=[1,'b']x=[1,'c']y=[1,'d']z=[1,'e']r=[''.join([str(elt) for elt in p]) for p in itertools.product(v,w,x,y,z)]print(r)# ['11111', '1111e', '111d1', '111de', '11c11', '11c1e', '11cd1', '11cde', '1b111', '1b11e', '1b1d1', '1b1de', '1bc11', '1bc1e', '1bcd1', '1bcde', 'a1111', 'a111e', 'a11d1', 'a11de', 'a1c11', 'a1c1e', 'a1cd1', 'a1cde', 'ab111', 'ab11e', 'ab1d1', 'ab1de', 'abc11', 'abc1e', 'abcd1', 'abcde']

请注意,乘积产生2 ** 5个元素。这是你想要的吗?

itertools.product在Python 2.6中。对于以前的版本,可以使用以下命令:

def product(*args, **kwds):        '''        Source: http://docs.python.org/library/itertools.html#itertools.product        '''        # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy        # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111        pools = map(tuple, args) * kwds.get('repeat', 1)        result = [[]]        for pool in pools: result = [x+[y] for x in result for y in pool]        for prod in result: yield tuple(prod)

编辑:正如豆形软糖指出的那样,原始问题要求唯一的集合。上面的代码不会产生独特套如果

a
b
v
w
x
y
,或
z
包含重复的元素。如果这对您来说是个问题,那么您可以将每个列表转换为一个列表,然后再将其发送到itertools.product:

r=[''.join([str(elt) for elt in p]) for p in itertools.product(*(set(elt) for elt in (v,w,x,y,z)))]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号