我很难将我的头绕在我试图实现的算法上。我有两个列表,想从这两个列表中获取特定的组合。
这是一个例子。
names = ['a', 'b'] numbers = [1, 2]
在这种情况下,输出将是:
[('a', 1), ('b', 2)] [('b', 1), ('a', 2)]
我的名字可能比数字多,即len(names) >= len(numbers). 这是一个包含 3 个名称和 2 个数字的示例:
len(names) >= len(numbers)
names = ['a', 'b', 'c'] numbers = [1, 2]
输出:
[('a', 1), ('b', 2)] [('b', 1), ('a', 2)] [('a', 1), ('c', 2)] [('c', 1), ('a', 2)] [('b', 1), ('c', 2)] [('c', 1), ('b', 2)]
注意 :此答案适用于上面提出的具体问题。如果您来自 Google,并且只是在寻找一种在 Python 中获得笛卡尔积的方法,itertools.product或者您正在寻找简单的列表理解 - 请参阅其他答案。
itertools.product
假设len(list1) >= len(list2)。然后你似乎想要的是从 list2 中获取所有长度排列len(list2)并将list1它们与项目匹配。在蟒蛇中:
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)]]