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 的所有值和的一半之间的差值,取差值最小的子串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值