一尘不染

两个列表之间的组合?

algorithm

已经有一段时间了,我无法将自己的头围绕着我尝试制定的算法。基本上,我有两个列表,并且想要获得两个列表的所有组合。

我可能没有解释正确,所以这里有个例子。

name = 'a', 'b'
number = 1, 2

在这种情况下的输出将是:

1.  A1 B2
2.  B1 A2

棘手的部分是,“名称”变量中的项目可能比“数字”变量中的项目更多(数字将始终等于或小于名称变量)。

我很困惑如何进行所有组合(是否嵌套到循环?),甚至在名称中的项目比数字列表中的项目多的情况下,对于将名称变量中的项目进行移位的逻辑更加困惑。

我不是最好的程序员,但是如果有人可以帮助我阐明实现这一目标的逻辑/算法,我想可以尝试一下。所以我只是停留在嵌套的循环上。

更新:

这是带有3个变量和2个数字的输出:

name = 'a', 'b', 'c'
number = 1, 2

输出:

1.  A1 B2
2.  B1 A2
3.  A1 C2
4.  C1 A2
5.  B1 C2
6.  C1 B2

阅读 215

收藏
2020-07-28

共1个答案

一尘不染

注意
:此答案是针对上面提出的特定问题的。如果您来自Google,只是在寻找一种使用Python获得笛卡尔积的方法,itertools.product或者您可能正在寻找简单的列表理解方法-
请参见其他答案。


假设len(list1) >= len(list2)。然后,你似乎需要的是采取长的所有排列len(list2)list1,并与列表2项匹配。在python中:

import itertools
list1=['a','b','c']
list2=[1,2]

[list(zip(x,list2)) for x in itertools.permutations(list1,len(list2))]

退货

[[('a', 1), ('b', 2)], [('a', 1), ('c', 2)], [('b', 1), ('a', 2)], [('b', 1), ('c', 2)], [('c', 1), ('a', 2)], [('c', 1), ('b', 2)]]
2020-07-28