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个元素,这需要永远想出所有可能的排列.
有没有一种有效的方法可以解决这个问题?
为什么不直接去追求你想要的东西呢?就像是:
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)
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |