python列出数字

时间:2015-01-23 22:00:09

标签: python

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

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

def lists(listNum, i):    

    if i == len(listNum) - 1:
       print listNum    
    else:    
        for j in range(i, 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,它会多次打印相同的序列。我怎么能阻止这个?

我不知道该怎么做。有人知道如何防止两次打印?

1 个答案:

答案 0 :(得分:2)

跟踪已添加的内容:

def permute(a, i, seen=set()):
    if i == len(a):
        if tuple(a) not in seen:
            seen.add(tuple(a))
            print(a)
    else:
        for j in xrange(i,len(a)):
            a[i], a[j] = a[j], a[i]
            permute(a, i + 1,seen)
            a[i], a[j] = a[j], a[i]

print(permute([1, 1, 3], 0))
[1, 1, 3]
[1, 3, 1]
[3, 1, 1]