Python 确定其元素构成较大列表中确切元素的列表分类

Python 确定其元素构成较大列表中确切元素的列表分类,python,list,comparison,combinations,Python,List,Comparison,Combinations,Python 3 序言 因此,我有一个元素列表,可以按如下或任何其他方式排序: List = [c, d, a, c, b] 让我们订购它使事情变得更简单: List = [a, b, c, c, d] 因此,列表可能有重复项,长度在1到10之间 用户将选择一个范围编号,例如: r = 3 范围编号是产生列表编号的逻辑的一部分,列表编号包含长度为1到r的“列表”子序列的所有可能组合。每种组合可以以任何方式排列。考虑到本例中的'List'和'r',用户将获得以下列表选择: %Lists o

Python 3

序言

因此,我有一个元素列表,可以按如下或任何其他方式排序:

List = [c, d, a, c, b] 
让我们订购它使事情变得更简单:

List = [a, b, c, c, d]
因此,列表可能有重复项,长度在1到10之间

用户将选择一个范围编号,例如:

r = 3
范围编号是产生列表编号的逻辑的一部分,列表编号包含长度为1到r的“列表”子序列的所有可能组合。每种组合可以以任何方式排列。考虑到本例中的'List'和'r',用户将获得以下列表选择:

%Lists of length 1.  
ListSelection1 = [[a], [b], [c], [c], [d]]

%Lists of length 2.
ListSelection2 = [[a, b], [a, c], [a, c], [a, d], [b, c], [b, c], [b, d], [c, c], [c, d], [c, d]]

%Lists of length 3.
ListSelection3 = [[a, b, c], [a, b, c], [a, b, d], [a, c, c], [a, c, d], [a, c, d], [b, c, c], [b, c, d], [b, c, d], [c, c, d]]
这些列表将被安排在另一个列表中,如下所示:

ListSelections = [ListSelection1, ListSelection2, ListSelection3]
问题

如何识别“ListSelections”中所有可能的子列表组合,这些子列表一起包含与“List”相同的元素选择?元素的顺序并不重要。关于上述示例,可接受的列表组合为[b,c]和[a,c,d],或[b]+[c]+[d]+[a,c]。你明白了


我需要确定所有正确的列表组合以及这些列表在“ListSelections”中的位置

您的说明有点混乱,但我怀疑您想要的是“排列”或“组合”:

Python有一个库可以为您实现这一点

输出=[itertools.permutationsinput,r_代表r_u在测距仪中]

我认为您想要找到的是一个数据库的分区集。为此,您可以按如下方式使用Symphy:

from sympy.utilities.iterables import multiset_partitions
res=[p for p in multiset_partitions(["a","b","c","c","d"])]
输出:

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

是否保留重复项?您是指构成“列表”中元素的列表的不同排列/顺序?像这样:[b,c]和[a,c,d][a,c,d]和[b,c]。我只需要所有成功的列表组合。我不需要每一个成功的排列。我只想返回上面两个示例中的一个。Dav2357,你击中了它的头部!这个函数正是我需要的。一开始我有点困惑。分区模式看起来很像贝尔数用来计算的数字,但36不是贝尔数。我意识到这是由于“列表”中的2个c而产生的省略重复模式的结果。我现在需要做的就是确保组合的排列被识别为组合。