2017-06-12 49 views
-1

我想制定一个算法来洗牌列表,然后根据这条规则制作一个所有组合的新列表:我该如何将这个列表换成这个规则?

您只能交换一对。例如:

array = [1, 2, 3] 
[3, 2, 1]  #number at index 0 switched with number at index 2 

有关如何编写它的任何想法?

编辑: Saschas代码运行良好。我问这个问题之前写了这个代码:

sols = [] 
for i in range(len(a)): 
    for j in range(len(a)): 
     a[i] = a[j] 
     a[j] = a[i] 
     sols_perm.append(a) 

我知道我会得到列表中的一些相同的元素,因为无序对的,但它只是创造了一个完整的相同元素的列表。任何想法为什么?

+0

你的交换是错误的。您需要一个临时变量(在用于设置[j]之前更改了一个[i])。我的方法中的代码工作不同(python风格的交换)!下次直接添加代码! – sascha

回答

0
sols = [] 
for i in range(len(array)): 
    for j in range(i+1, len(array)): # symmetry-reduction -> ordered pairs 
     sol = array[:]     # copy list 
     sol[i], sol[j] = sol[j], sol[i] # swap 
     sols.append(sol) 
+0

谢谢,检查编辑! –

0

尝试下面的功能:

def swap(inlist): 
    n = len(inlist) 
    res = [x for x in inlist] 
    for i in range(n): 
     for j in range(i+1, n): 
      tmp = res[i] 
      res[i] = res[j] 
      res[j] = tmp 
    return res