python - 在列表中找到 2^n -2 个元素组合

标签 python list combinations apriori

我有以下列表:

list1 = ['g1','g2','g3','g4']

我想找到 2^n-2 组合,其中 n 是列表中项目的总数。对于 n = 4,结果应该是 2^4 -2 = 14,即 14 种组合。

组合是:

[[['g1'],['g2','g3','g4']],[['g2'],['g1','g3','g4']], [['g3'],['g1','g2','g4']],['g4'],['g1','g2','g3']],[['g1','g2'],['g3','g4']],[['g1','g3'],['g2','g4']],[['g1','g4'],['g3','g4']],[['g2','g3'],['g1','g4']],
[['g2','g4'],['g1','g3']],[['g3','g4'],['g1','g2']],[['g1','g2','g3'],['g4']],[['g2','g3','g4'],['g1']],[['g3','g4','g1'],['g2']],[['g4','g1','g2'],['g3']]]

我知道一种方法: 在第一次迭代中,取单个元素并将其放入列表和第二个列表中的其他元素:['g1'],['g2','g3','g4'] 在第二次迭代中,在列表中取 2 个元素,在第二个列表中取其他元素。 ['g1','g2'],['g1','g4'] 还有其他方法吗? 我正在用 python 编写这个程序。 我的方法是昂贵的。是否有任何库方法可以快速执行此操作。

最佳答案

这是使用 itertools 的函数式方法

import itertools as iter

list1 = ['g1', 'g2', 'g3', 'g4']
combinations = [iter.combinations(list1, n) for n in range(1, len(list1))]
flat_combinations = iter.chain.from_iterable(combinations)
result = map(lambda x: [list(x), list(set(list1) - set(x))], flat_combinations)
# [[['g1'], ['g4', 'g3', 'g2']], [['g2'], ['g4', 'g3', 'g1']], [['g3'], ['g4', 'g2', 'g1']],...
len(result)
# 14

关于python - 在列表中找到 2^n -2 个元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670740/

相关文章:

python - 列出多个匹配实例的交集

python - 将 Pandas 列的列表拆分为多列

java - 是否有可能在 O(1) 中得到 m 个字符长度组合的第 k 个元素?

arrays - 使用枚举查找数组(Swift 5)中的所有组合

php - 图像处理(带 PHP 的 OpenCV)- exec 命令问题

python - Django 有足够的脚手架吗? (à la Ruby on Rails)

python - 如何在数据帧上使用 sort_index()?

Python 和 PiCamera 颜色检测 bool 问题

r - R 中的 "Only the first element of list is used"

python - 查找对(连接)的组合