繁体   English   中英

如何在python中将项目从一个列表移动到另一个列表?

[英]How to move Items from one list to the another list in python?

我想探索10个节点的所有可能的社区分配。 我总共有10个项目: 10 15 25 30 45 50 65 75 80 90有两个列表(社区) c1c2 ,我将分配这些项目。 最初,我将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个项目的所有可能的迭代从c1c2 (总共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个项目的所有可能分配分配给两个列表(忽略c1==c2 )。

尝试:

c1.append(c2.pop(i))
c1.sort()

要么

c2.append(c1.pop(i))
c2.sort()

哪里:

  • i-索引列表

据我了解,您对算法更感兴趣,而不是简单地从一个列表追加到另一个列表。

有一个标准库函数,它提供可迭代的组合。

使您自己的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

如果要创建10个项目到2个列表的所有可能分配,那么我将在itertools软件包中使用组合。 例如:

import itertools
items = [10, 25, 45, 50, 15, 30, 65, 75, 80, 90]

for m in xrange(len(items)+1):
    combinations = list(itertools.combinations(items, m))
    for c1 in combinations:
       c1 = list(c1)
       c2 = list(set(items) - set(c1))
       print c1, c2

以下内容将项目从一个列表移动到另一个列表,而不会出现原始问题中遇到的不正确的迭代器位置问题:

c1 = [10, 45, 50, 75, 90]
c2 = [15, 25, 30, 65, 80]

while c1:
    c2.append(c1[0])
    del c1[0]
    print (c1, c2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM