我想探索10个节点的所有可能的社区分配。我共有10个项目:10 15 25 30 45 50 65 75 80 90
有两个列表(社区)c1
和c2
我将分配这些项目。最初,我将10个项目拆分为以下内容:
c1 = [10, 45, 50, 75, 90] c2 = [15, 25, 30, 65, 80]
现在,我想将一个项目移至另一个列表,例如:
c1 = [45, 50, 75, 90] c2 = [10, 15, 25, 30, 65, 80]
c1 = [10, 45, 50, 75] c2 = [15, 25, 30, 65, 80, 90]
...
我还想移动两个项目,三个项目,四个项目(但不要移动五个项目)。喜欢,
c1 = [50, 75, 90] c2 = [10, 15, 25, 30, 45, 65, 80]
c1 = [10, 75, 90] c2 = [15, 25, 30, 45, 50, 65, 80]
...
c1 = [75, 90] c2 = [10, 15, 25, 30, 45, 50, 65, 80]
c1 = [10, 90] c2 = [15, 25, 30, 45, 50, 65, 75, 80]
...
c1 = [90] c2 = [10, 15, 25, 30, 45, 50, 65, 75, 80]
c1 = [45] c2 = [10, 15, 25, 30, 50, 65, 75, 80, 90]
...
我想将1-4个项目的所有可能的迭代从c1
移到c2
。(总共31种可能性2^5-1
:)每个列表内的顺序无关紧要。我怎样才能做到这一点?
我使用了以下代码。
c1 = [10, 45, 50, 75, 90]
c2 = [15, 25, 30, 65, 80]
for i in c1:
c2.append(i)
c1.remove(i)
print c1, c2
使用此代码,我只能得到以下结果。这段代码无法完成将一项移至的任务c2
。我的代码没有尝试将多个项目移至c2
。
[45, 50, 75, 90] [15, 25, 30, 65, 80, 10]
[45, 75, 90] [15, 25, 30, 65, 80, 10, 50]
[45, 75] [15, 25, 30, 65, 80, 10, 50, 90]
如何成功完成将物品移至的任务c2
?通过此任务,我可以将10个项目的所有可能分配分配给两个列表(忽略case c1==c2
)。
据我了解,您对算法更感兴趣,而不是简单地从一个列表追加到另一个列表。
有一个标准库函数,它提供可迭代的组合。
发挥自己的combinations
作用确实是一个很好的练习。
快速而肮脏的解决方案:
import itertools
c1 = [10, 45, 50, 75, 90]
c2 = [15, 25, 30, 65, 80]
print c1, c2
for i in range(1, 5):
for c in itertools.combinations(c1, i):
mc1 = sorted(list(set(c1).difference(set(c))))
mc2 = sorted(list(set(c2).union(c)))
print mc1, mc2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句