Python 小题目分享

描述:

    有两个无序整数列表a和b,要求实现一个大挪移心法,通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

 

说明:

    1、用例中,a和b都是非空的整数列表,且a和b的长度相同;
 

#!/usr/bin/python -*- coding: utf-8 -*-

import itertools

class Demo:
    def demo(self, list1, list2):
        c = list1 + list2
        list1 = min(itertools.combinations(c, len(c)/2), key=lambda x:abs(sum(x)-sum(c)/2))
        list2 = c
        for i in list1:
            list2.remove(i)
        return list1, list2 
            

var = Demo();
a = [20,26,38,40]
b = [58,60,78,80]
a,b = var.demo(a,b)
print a
print b

//------------------------------------------------------------------------------------------------------------------------------------------//

 list1 = min(itertools.combinations(c, len(c)/2), key=lambda x:abs(sum(x)-sum(c)/2))

itertools.combinations(c,len(c)/2):利用迭代器,将 链表c 按照链表长度的一半获取所有子串

利用min(...,key)的lambda表达式取子串所有值的和与 c 的所有值和的一半之间的差值,取差值最小的子串

你可能感兴趣的:(x,Python)