如何在列表中检查邻接,然后在python中修复邻接

use*_*696 5 python algorithm list permutation

我有这个清单:

row = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

我需要随后洗牌或随机化列表:

shuffle(row)
Run Code Online (Sandbox Code Playgroud)

然后我需要通过找到任何相邻的1并移动它们,使它们至少相隔一个0.例如,我需要结果看起来像这样:

row = [0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

我不知道最有效的方法是搜索相邻的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)]
Run Code Online (Sandbox Code Playgroud)

但是现在我的行​​是20个元素,这需要永远想出所有可能的排列.

有没有一种有效的方法可以解决这个问题?

גלע*_*רקן 1

为什么不直接去追求你想要的东西呢?就像是:

row = ["0","0","0","0","0","0","0","0","0","01","01","01","01","01","01"]
random.shuffle(row)
print (map(int, list("".join(row)[1:])))
Run Code Online (Sandbox Code Playgroud)