首页 > 解决方案 > 如何使用python循环函数更改列表中元素的顺序?

问题描述

我有一个清单:

s=[[[’A’, ’B’], [’C’]],[[’A’], [’B’]], [[’B’], [’A’]]]

这个列表的长度是 3,这意味着我应该得到这个列表的 6 个不同的顺序:

这意味着结果应该是

[[[’A’, ’B’], [’C’]],[[’A’], [’B’]], [[’B’], [’A’]]]
[[[’A’], [’B’]],[[’A’, ’B’], [’C’]], [[’B’], [’A’]]]
[[[’B’], [’A’]],[[’A’], [’B’]],[[’A’, ’B’], [’C’]]]
.....

我的代码是:

COUNT=0
order = []
def perm(n,begin,end):
    global COUNT
    if begin>=end:
       order.append(n)
       COUNT +=1
    else:
       i=begin
       for num in range(begin,end):
            n[num],n[i]=n[i],n[num]
            perm(n,begin+1,end)
            n[num],n[i]=n[i],n[num]
  return order
  F =  [[['A', 'B'], ['C']],[['A'], ['B']], [['B'], ['A']]]
  perm(F,0,len(F))

但是这个结果是错误的,它返回了六次相同的列表!

标签: pythonpython-2.7

解决方案


我无法判断您的代码有什么问题,但您可以使用itertools标准库中的模块来获得预期的结果:

import itertools

F =  [[['A', 'B'], ['C']],[['A'], ['B']], [['B'], ['A']]]
for item in itertools.permutations(F):
    print(item)

输出:

([['A', 'B'], ['C']], [['A'], ['B']], [['B'], ['A']])
([['A', 'B'], ['C']], [['B'], ['A']], [['A'], ['B']])
([['A'], ['B']], [['A', 'B'], ['C']], [['B'], ['A']])
([['A'], ['B']], [['B'], ['A']], [['A', 'B'], ['C']])
([['B'], ['A']], [['A', 'B'], ['C']], [['A'], ['B']])
([['B'], ['A']], [['A'], ['B']], [['A', 'B'], ['C']]) 

推荐阅读