Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python组合和置换代码_Python_Combinations_Itertools - Fatal编程技术网

Python组合和置换代码

Python组合和置换代码,python,combinations,itertools,Python,Combinations,Itertools,我有以下代码来生成组合集、在列表中追加组合以及返回列表 def make_combination(): import itertools max_range = 5 indexes = combinations_plus = [] for i in range(0, max_range): indexes.append(i) for i in xrange(2, max_range): each_combination = [list(x)

我有以下代码来生成组合集、在列表中追加组合以及返回列表

def make_combination():
  import itertools  
  max_range = 5 
  indexes = combinations_plus = []
  for i in range(0, max_range): 
    indexes.append(i)
    for i in xrange(2, max_range): 
      each_combination = [list(x) for x in itertools.combinations(indexes, i)]
      combinations_plus.append(each_combination)
  retrun combinations_plus
它生成了太多我不想要的组合(难以显示)。但是,我想要以下组合:

1) [0,1]、[0,2]、[0,3]、[0,4]、[1,2]、[1,3]、[1,4]、[2,3]、[2,4]、[3,4]]

2) [0,1,2]、[0,1,3]、[0,1,4]、[0,2,3]、[0,2,4]、[0,3,4]、[1,2,3]、[1,2,4]、[1,3,4]、[2,3,4]]

3) [0,1,2,3],[0,1,2,4],[0,1,3,4],[0,2,3,4],[1,2,3,4]]

我认为问题在下面几行,但我不知道是什么。知道错误是什么吗

combinations_plus.append(each_combination)

做你想做的事情的一个简单方法是:

list(list(itertools.combinations(list(range(5)), i)) for i in range(2, 5))

要修复原始代码,有两个问题:

indexes = combinations_plus = []
上面为完全相同的列表创建了两个名称。附加到任何一个都会附加到两个,这不是您想要的

不应嵌套的两个
,或者索引列表不完整:

for i in range(0, max_range): 
    indexes.append(i)
for i in xrange(2, max_range): 
    each_combination = [list(x) for x in itertools.combinations(indexes, i)]
    combinations_plus.append(each_combination)
实际上,使用
范围
初始化
索引
,并跳过
循环的第一个

indexes = range(max_range) # becomes [0,1,2,3,4]
combinations_plus = []
通过这些修复(以及修复
return
的拼写),您可以:

def make_combination():
  import itertools  
  max_range = 5 
  indexes = range(max_range)
  combinations_plus = []
  for i in xrange(2, max_range): 
    each_combination = [list(x) for x in itertools.combinations(indexes, i)]
    combinations_plus.append(each_combination)
  return combinations_plus
返回(为可读性添加了换行符):


它生成哪些组合是您不想要的?您如何确定您想要哪些组合?尝试使用调试器。它将帮助您发现自己的错误。我使用以下代码组合附加每个组合后,它将生成所有组合。\u plus.append(每个\u组合)。我不想要所有的组合。我想要分别的组合C(N,2)、C(N,3)、C(N,4)和C(N,5)。我想要每个组合都放在列表中。
index=combinations\u plus=[]
-这和你想象的不一样。
索引
组合_plus
是同一个列表。不是两个空列表。一个空列表有两个名称。对
索引
所做的任何事情都会发生在
组合_plus
上,因为它们是相同的东西。这看起来不更短吗?
[list](itertools.compositions(range(5),i))for i in range(2,5)]
非常感谢@Mark Tolonen。没有选项可以使这两个答案都正确。我还希望单击此选项以确认正确。
[[[0, 1], [0, 2], [0, 3], [0, 4], [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]],
 [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]],
 [[0, 1, 2, 3], [0, 1, 2, 4], [0, 1, 3, 4], [0, 2, 3, 4], [1, 2, 3, 4]]]