有没有一种算法可以找到两个列表和五个列表的唯一组合?

2024-09-29 17:12:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有N个列表,我想找到它们的独特组合。我已经把它写在我的白板上,它似乎都有一个模式,我只是还没有找到它。我觉得我可以表达一种蛮力的方法,这肯定是我追求的东西。有其他选择吗?不同的数据结构(二叉树?)让这样的工作更合适?在

给定

#    1  2
a = [1, 2]
b = [a, b]

结果是:

^{pr2}$

给定

v = [1, a]
w = [1, b]
x = [1, c]
y = [1, d]
z = [1, e]

结果是:

r = [11111, 1bcde, 11cde, 111de, 1111e, a1111, ab111, abc11, abcd1, abcde, 1b1d1, 1bc1e, 11c11, 11c1e, ... ] 

Tags: 方法数据结构列表模式蛮力abcde二叉树pr2
3条回答

我想另一个答案是,为了回应这个问题:

I've written it out on my whiteboard and it all seems to have a pattern, I just haven't found it yet.

这是一种模式。在

假设您只有两个列表要合并。你可以通过做一个网格找到所有的组合。在

       black        blue
     +------------+------------+
coat | black coat | blue coat  |
     +------------+------------+
hat  | black hat  | blue hat   |
     +------------+------------+

如您所见,有2*2个组合。如果有30种颜色和14种衣服,你将有30*14=420种组合。在

当您添加更多列表时,模式将继续。不是二维矩形,而是一个三维的长方形数组,或者最终得到一个n维的超矩形。不管怎样,组合的总数总是所有列表长度的乘积。在

如果你知道你有多少个列表,嵌套循环是一种自然的组合方式。在

^{pr2}$

如果列表以字典顺序开始,并且没有重复项,则输出也将按字典顺序。在

也许你在找itertools.product公司名称:

#!/usr/bin/env python
import itertools
a=[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在Python2.6中。对于以前的版本,可以使用以下命令:

^{pr2}$

编辑:正如jellybean指出的,最初的问题要求有独特的设置。如果abvwxy、或{}包含重复的元素,则上述代码将不会生成唯一的集。如果这对您来说是个问题,那么您可以在将每个列表发送到之前将其转换为一个集合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)))]

我不认为这个问题要求输入的功率集,我认为它要求的是输入集的笛卡尔积。如果我错了,我希望有人能纠正我。在

至于一个算法,既然你知道你在寻找什么,谷歌将是你的朋友。在

在第二个示例中,从结果集中排除1b1de之类的条目。这是故意的吗?如果是故意的,那么构造输出的规则是什么?在

相关问题 更多 >

    热门问题