多个长度数组对比取得n个不重复组合
时间: 2024-02-01 14:16:00 浏览: 45
取不重复的N个随机数
如果你有多个长度不同的数组,想要取得n个不重复的组合,可以按照以下步骤进行:
1. 把所有数组合并成一个大数组,记为A。
2. 从A中取出n个元素的组合,可以使用组合算法,如递归实现的组合算法或使用itertools库中的combinations函数。
3. 对每个组合,检查它是否来自于不同的原始数组,如果是,则保留该组合,否则舍弃。
下面是使用Python实现上述步骤的示例代码:
```python
import itertools
def get_combinations(arrays, n):
# 合并所有数组
A = sum(arrays, [])
# 获取n个元素的组合
combinations = itertools.combinations(A, n)
# 检查组合是否来自不同的原始数组
unique_combinations = []
for c in combinations:
if len(set(c).intersection(*arrays)) == n:
unique_combinations.append(c)
return unique_combinations
```
示例用法:
```python
a1 = [1, 2, 3]
a2 = ['a', 'b', 'c']
a3 = ['x', 'y', 'z']
arrays = [a1, a2, a3]
n = 2
combinations = get_combinations(arrays, n)
print(combinations)
# 输出:[(1, 'a'), (1, 'b'), (1, 'c'), (1, 'x'), (1, 'y'), (1, 'z'), (2, 'a'), (2, 'b'), (2, 'c'), (2, 'x'), (2, 'y'), (2, 'z'), (3, 'a'), (3, 'b'), (3, 'c'), (3, 'x'), (3, 'y'), (3, 'z'), ('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')]
```
以上代码将返回所有长度为2的组合,这些组合来自于不同的原始数组。
阅读全文