加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

续"如何捅破python编程的那层纸之三"

发布时间:2020-12-17 17:10:19 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # coding:utf-8import itertoolsdef sameSums1(int_list): if len(int_list) == 1: # 列表只有一个元素必不能等分两组 return False sum_of_lsit = su

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

# coding:utf-8

import itertools

def sameSums1(int_list):
    if len(int_list) == 1:
        # 列表只有一个元素必不能等分两组
        return False
    sum_of_lsit = sum(int_list)
    halfsum = sum_of_lsit / 2
    if sum_of_lsit % 2:
        # 和为奇数不可等分
        return False
    int_list.sort(reverse=True)
    for i in xrange(1,len(int_list)/2 + 1):
        if sum(int_list[:i]) < halfsum:
            # 若最大的前N位之和不足半值就不必检测N位组合的各种方案了
            continue
        elif sum(int_list[:i]) == halfsum:
            # 若恰巧是半值就直接返回
            return tuple(int_list[:i])
        for subset in itertools.combinations(int_list,i):
            sumsub = sum(subset)
            if sumsub == halfsum:
                # 找到就结束
                return subset


if __name__ == "__main__":
    import doctest
    doctest.testmod()
    import time
    lst1 = [3,9,10,30,8]
    lst2 = [4,5,6,7,8]
    lst3 = [2,2,3,3]
    lst4 = [10,8,1]
    lst5 = [74,80,40,38,68,58,91,65,75,88,47,84,30]
    lst6 = [97,87,96,24,12,98,85,99,67,49,86,83,28,57,90,62,93,23]
    lst7 = [93,94,36,4,54,69,64,19,21,53,46,82,78,20,45,27,72,48,49]

    t0 = time.time()
    print sameSums1(lst1)
    print sameSums1(lst2)
    print sameSums1(lst3)
    print sameSums1(lst4)
    print sameSums1(lst5)
    print sameSums1(lst6)
    print sameSums1(lst7)
    t1 = time.time()
    print t1 - t0

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读