根据条件从集合中生成唯一的有序子集
Generate unique ordered subsets from set based on condition
正在为我的离散数学 class 解决 python 内部子集的生成问题。我有一组要拆分成子集,这些子集根据特定条件和特定大小进行排序。
例如:子集 = {x1, x2, x3} ⊆ {5, 10, 15, 20, 25} 和 x1 < x2 < x3.
我想从更大的集合中生成所有可能的子集,大小为 3,条件是它们按升序排列。我很有可能过度考虑了这个的实施。我目前有一个可用的排列生成器,但它基本上生成了所有可能的组合。代码:
def perm(elements):
if len(elements) <= 1:
yield elements
else:
for i in range(len(elements)):
for p in perm(elements[:i] + elements[i+1:]):
yield [elements[i]] + p
我希望能够对此进行修改,以便我可以使用此函数生成我正在寻找的内容。我尝试修改初始 for 循环的范围,但它最终删除了某些可能以其他方式出现的排列,可以说我比取得进展更受困。如有任何帮助或建议,我们将不胜感激。
除非我误解了你在找什么itertools.combinations已经实现了获取所有唯一子集的功能。
假设您只是在寻找每个要排序的组合。只要初始输入是排序的,组合也是如此。
import itertools
elements = sorted({5, 10, 15, 20, 25})
subset_size = 3
print(list(itertools.combinations(elements, subset_size)))
生产:
[(5, 10, 15),
(5, 10, 20),
(5, 10, 25),
(5, 15, 20),
(5, 15, 25),
(5, 20, 25),
(10, 15, 20),
(10, 15, 25),
(10, 20, 25),
(15, 20, 25)]
正在为我的离散数学 class 解决 python 内部子集的生成问题。我有一组要拆分成子集,这些子集根据特定条件和特定大小进行排序。
例如:子集 = {x1, x2, x3} ⊆ {5, 10, 15, 20, 25} 和 x1 < x2 < x3.
我想从更大的集合中生成所有可能的子集,大小为 3,条件是它们按升序排列。我很有可能过度考虑了这个的实施。我目前有一个可用的排列生成器,但它基本上生成了所有可能的组合。代码:
def perm(elements):
if len(elements) <= 1:
yield elements
else:
for i in range(len(elements)):
for p in perm(elements[:i] + elements[i+1:]):
yield [elements[i]] + p
我希望能够对此进行修改,以便我可以使用此函数生成我正在寻找的内容。我尝试修改初始 for 循环的范围,但它最终删除了某些可能以其他方式出现的排列,可以说我比取得进展更受困。如有任何帮助或建议,我们将不胜感激。
除非我误解了你在找什么itertools.combinations已经实现了获取所有唯一子集的功能。
假设您只是在寻找每个要排序的组合。只要初始输入是排序的,组合也是如此。
import itertools
elements = sorted({5, 10, 15, 20, 25})
subset_size = 3
print(list(itertools.combinations(elements, subset_size)))
生产:
[(5, 10, 15),
(5, 10, 20),
(5, 10, 25),
(5, 15, 20),
(5, 15, 25),
(5, 20, 25),
(10, 15, 20),
(10, 15, 25),
(10, 20, 25),
(15, 20, 25)]