小编典典

两个长度不等的列表之间的排列

all

我很难将我的头绕在我试图实现的算法上。我有两个列表,想从这两个列表中获取特定的组合。

这是一个例子。

names = ['a', 'b']
numbers = [1, 2]

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

[('a', 1), ('b', 2)]
[('b', 1), ('a', 2)]

我的名字可能比数字多,即len(names) >= len(numbers). 这是一个包含 3 个名称和 2 个数字的示例:

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)]

阅读 72

收藏
2022-05-27

共1个答案

小编典典

注意 :此答案适用于上面提出的具体问题。如果您来自 Google,并且只是在寻找一种在 Python
中获得笛卡尔积的方法,itertools.product或者您正在寻找简单的列表理解 - 请参阅其他答案。


假设len(list1) >= len(list2)。然后你似乎想要的是从 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)]]
2022-05-27