问题如下:给定一个整数列表(1-n),在保持顺序和顺序的同时打印列表的所有排列。
例如:lst = [1,2,3](在这种情况下,n为3)
输出:
[1,2,3]
[1,2]
[2,3]
[1]
[2]
[3]
这里发生的事情是,最大的组首先被打印(包括直到n的所有整数),并且只有1,2,3被接受,因为它保持了顺序并且不改变顺序。接下来的两组。在这种情况下1,2和2,3。再次保持顺序。最后,1的组将是所有整数。
我不确定如何解决这个问题,因为它不同于打印所有排列,这将使2,1和3,2这样的情况可以接受;但是,这不能保持顺序。此外,将不接受1,3,因为1后面的数字是2。
任何帮助将不胜感激!
此代码似乎对我有用:
for x in range(len(lst)):
for y in range(x+1):
print(lst[y:y+len(lst)-x])
或使用列表推导:
finalList = [lst[y:y+len(lst)-x] for x in range(len(lst)) for y in range(x+1)]
您可以遍历所有可能的开始和结束索引:
lst = [1,2,3]
combo = []
for size in range(len(lst),0,-1):
for start in range(len(lst)-size+1):
combo.append(lst[start:start+size])
print(combo)
此输出:
[[1,2,3],[1,2],[2,3],[1],[2],[3]]