繁体   English   中英

将随机 2 个元素从 list_a 移动到 list_b 时,是否有优化的方法来计算可能的转弯次数?

[英]is there optimized way to calculate how many possible turn when moving random 2 elements from list_a to list_b?

我有以下 2 个列表

a = [1,2,3,4,5]

b = []

  1. 将 2 个随机元素从 a 移动到 b (例如 1, 5) ==> a=[2,3,4], b=[1,5]
  2. 将 1 个随机元素从 b 移回 a(例如 1)==> a=[1,2,3,4], b=[5]
  3. 将 2 个随机元素从 a 移动到 b (例如 1,3) ==> a=[2,4], b=[1,3,4,5]
  4. 将 1 个随机元素从 b 移回 a(例如 3)==> a=[2,3,4], b=[1,4,5] ......重复直到a=[] 和 b=[1,2,3,4,5]

我的问题是:我想涵盖所有可能发生的运行,并且每次运行不应相互重叠。

那么有没有什么优化的方法可以找到它?

感谢您的帮助。

谢谢,戴尔

我尝试了以下解决方案:

import itertools
import random

class Test():
    a_list=[-4,-7,6,103]
    b_list=[]

    def combine(self,arr):
        combination = [i for i in itertools.combinations(arr, 2)]
        return combination 

    def move(self, a, b):
        for ii in self.combine(a):
            print 'combination: {}'.format(ii)
            print 'old_a %s' %a
            new_b = list(set(b).union(ii))
            new_a = [x for x in a if x not in ii]
            print '1. new_a: %s new_b: %s' %(new_a, new_b)
            # self.list_total.append(total)
            if len(new_a) > 0:
                new_a.append(min(new_b))
                new_b.remove(min(new_b))
                print '2. new_a: %s new_b: %s' %(new_a, new_b)
            if len(new_a) > 0:
                self.move(new_a, new_b)
            else:
                print ('------- END -------' )

    def main(self):
        self.move(self.a_list, self.b_list)


if __name__ == '__main__':
    Test().main()    

但我的解决方案似乎不正确,仍然错过了一些情况。 非常感谢您的建议!

暂无
暂无

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

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