我需要在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那么它将打印其中一些两次。 我怎么能阻止这个?
答案 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
进行排序。