已经有一段时间了,我无法将自己的头围绕着我尝试制定的算法。基本上,我有两个列表,并且想要获得两个列表的所有组合。
我可能没有解释正确,所以这里有个例子。
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
注意 :此答案是针对上面提出的特定问题的。如果您来自Google,只是在寻找一种使用Python获得笛卡尔积的方法,itertools.product或者您可能正在寻找简单的列表理解方法- 请参见其他答案。
itertools.product
假设len(list1) >= len(list2)。然后,你似乎需要的是采取长的所有排列len(list2)的list1,并与列表2项匹配。在python中:
len(list1) >= len(list2)
len(list2)
list1
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)]]