python - 如何获取两个列表之间的所有映射?

标签 python list combinatorics itertools

我们有两个列表,A 和 B:

A = ['a','b','c']
B = [1, 2]

有没有一种 Python 的方法来构建 A 和 B 之间包含 2^n(这里 2^3=8)的所有映射集?那就是:

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

使用itertools.product,可以获得所有的元组:

import itertools as it
P = it.product(A, B)
[p for p in P]

这给出了:

Out[3]: [('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1), ('c', 2)]

最佳答案

您可以使用 itertools.product 来执行此操作和 zip

from itertools import product
print [zip(A, item) for item in product(B, repeat=len(A))]

输出

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

product(B, repeat=len(A)) 产生

[(1, 1, 1),
 (1, 1, 2),
 (1, 2, 1),
 (1, 2, 2),
 (2, 1, 1),
 (2, 1, 2),
 (2, 2, 1),
 (2, 2, 2)]

然后我们从产品中挑选每个元素并用 A 压缩它,以获得您想要的输出。

关于python - 如何获取两个列表之间的所有映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23058028/

相关文章:

python - 计算不同大小的 NumPy 数组列表的平均值

python - 树状图 y 轴标记困惑

php - 正则表达式在它们之间有空格时加入数字

python - 打印列表中项目的位置

python - Pandas 中的窗口重叠

python - 如何编写一个将列表添加到字典的函数?

python - 如何将列表列表中的值分配给键以在python中创建字典

algorithm - 查找 2 个字符串的所有交替连接

用于 MySQL 表排列的 PHP MySQL

algorithm - 给定一个排列的字典序号,是否有可能在 O(1) 中得到其中的任何项目