按顺序在python中打印数字

时间:2015-01-22 17:39:12

标签: python

我需要在pyhton中打印所有数字列表。

到目前为止,我写了这个:

def lists(listNum, i):    
    if i == len(listNum) - 1:
       print listNum    
    else:    
        for j in range(index, len(listNum)):
            listNum[i], listNum[j] = listNum[j], listNum[i]    
            lists(listNum, i + 1)    
            listNum[i], listNum[j] = listNum[j], listNum[i]     
lists([1, 2, 3], 0)

如何只打印一次列表? 如果列表是1,1,2那么它将打印其中一些两次。 我怎么能阻止这个?

2 个答案:

答案 0 :(得分:0)

排列是一个重要的组织。因此,如果您按升序排序,那么您将获得许多读取[1, 2, 3]并且不是您想要的行。保持订单不变。

答案 1 :(得分:0)

由于交换,您没有获得升序。每当你在内部循环中交换两个彼此不相邻的元素时,listNum(i+1:)就会变成未排序的,因此你的排列不会按升序出现。

要解决此问题,您必须将i元素交换到第二个位置,这可以通过交换子序列来完成,如下所示:

def permutation(listNum, i):    
    if i == len(listNum) - 1:
       print listNum    
    else:    
        for j in range(i, len(listNum)):
            if j != i:
                listNum[i], listNum[j] = listNum[j], listNum[i]    
                listNum[i+1:j+1] = listNum[j:j+1] + listNum[i+1:j]    
            permutation(listNum, i + 1)    
            # now swap it back
            if j != i:
                listNum[i+1:j+1] = listNum[i+2:j+1] + listNum[i+1:i+2]
                listNum[i], listNum[j] = listNum[j], listNum[i] 

在启动算法处理未排序的输入之前,您可能还应该对listNum进行排序。