我需要在 Python 中生成序列的所有“有序子集”(如果我没有使用正确的数学术语,请道歉),用None
.Given替换省略的元素[1, 2]
,我想要[(1, 2), (1, None), (None, 2), (None, None)]
。每个“有序子集”都应该具有这样的属性:在每个位置,它要么与种子序列中的元素完全相同,要么是None
.
我可以很容易地生成带有以下省略元素的子集:
from itertools import combinations
for length in xrange(len(items), 0, -1):
for combination in combinations(items, length):
yield combination
不过,我无法弄清楚重建缺失元素的最有效方法是什么。我的第一个想法是做这样的事情:
from itertools import combinations
indexes = range(len(items))
for length in xrange(len(items), 0, -1):
for combination in combinations(indexes, length):
yield tuple(items[i] if i in combination else None for i in indexes)
只是想知道是否有人可以发现这方面的任何明显缺陷,或者我是否错过了更有效的解决方案。(请注意,这items
将是一个相当短的列表,通常少于 10 个元素,所以我不关心内部循环中“组合”的 O(N) 搜索)。