我有一个列表:
row = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我需要对列表进行随机排序或洗牌:
shuffle(row)
然后,我需要查找任何相邻的1,并将它们移动,以便它们之间至少有一个0。例如,我需要结果如下所示:
row = [0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]
我不确定寻找相邻的1并将它们移动以使它们不再相邻的最有效方法是什么...我还需要重复这样做来得到多个此行的组合。
原本当列表较短时,我是这样做的:
row = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
rowlist = set(list(permutations(row)))
rowschemes = [(0, 0) + x for x in rowlist if '1, 1' not in str(x)]
但是现在我的行有20个元素,这样计算所有可能的排列需要很长时间。
有没有一种有效的方法来处理这个问题?
[0, 1, 1, 1, 1, 1]
? - Savir