我正在寻找Python中的函数,该函数每次都为您提供不同的排序,而无需替换给定的序列。例如,给定:
[0, 1, 2, 3, 4, 5]
该功能应提供诸如以下的组合:
[1, 2, 3, 4, 5, 0]
[2, 3, 1, 5, 0, 4]
但不是下一个(因为数字0已经在第一个位置)
[0, 4, 5, 1, 3, 2]
或逻辑上是给定序列的开始。
from itertools import permutations
a = [0, 1, 2, 3, 4, 5]
per = list(permutations(a))
for i in per:
if i[0] != a[0]:
print(i)
一种可能的解决方案,旋转列表然后转置它:
from random import sample
lst = [0, 1, 2, 3, 4, 5]
def rotate(l, x):
return l[-x:] + l[:-x]
vals = [*zip(*[rotate(lst, i) for i in sample(range(len(lst)), len(lst))])]
from pprint import pprint
pprint(vals)
打印(例如):
[(1, 0, 3, 4, 2, 5),
(2, 1, 4, 5, 3, 0),
(3, 2, 5, 0, 4, 1),
(4, 3, 0, 1, 5, 2),
(5, 4, 1, 2, 0, 3),
(0, 5, 2, 3, 1, 4)]