生成数组中包含某些元素的所有组合的最佳方法

时间:2018-09-21 06:47:42

标签: arrays combinations

我知道我可以轻松获得所有组合,但是有没有办法只获得包含列表中某些元素的组合?我举个例子。

我说我有

arr = ['a','b','c','d']

例如,如果n = 3,我想获取长度为(n)且包含'a'的所有组合

[a, b, c]
[a, b, d]
[a, c, d]

我想知道是否有一种更好的方法来生成它而不生成所有组合。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我将继续进行以下操作:

  1. 从数组中删除“ a”
  2. 从精简数组生成2个元素的所有组合
  3. 对于每种组合,在所有三个可能的位置插入“ a”

答案 1 :(得分:0)

您可以结合使用itertoolslist comprehension。喜欢: 导入itertools

import itertools

arr = ['a', 'b', 'c', 'd']
temp = itertools.combinations(arr, 3)
result = [list(i) for i in list(temp) if 'a' in i]
print(result)

输出:

[['a', 'b', 'c'], ['a', 'b', 'd'], ['a', 'c', 'd']]