文档章节

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

黄哥Python培训
 黄哥Python培训
发布于 2015/07/23 18:08
字数 596
阅读 168
收藏 11

# coding:utf-8

"""

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

贴吧上有人问

定义一个函数,名字为sameSums(aList),alist是一个整形list,函数作用是判断能分成两组,使得两组数字的和相等。若可以择返回值是true,若不可以返回值是false。如下例:

sameSums([4, 7, 6, 3]) --> True //4+6 = 10 and 7 + 3 = 10

sameSums([3, 3]) --> True

sameSums([4, 12, 16]) --> True //4+12= 16 and 16

sameSums([5, 1]) --> False

这个题目,对初学者来说,有点难度,但稍微有点算法基础,编程思路,就不难。

前面用贪心算法,只能满足上面4个测试用例的正确解决。

如何捅破python编程的那层纸之二

https://github.com/pythonpeixun/article/blob/master/pythonstudy2.md

但是对[4, 5, 6, 7, 8],[2, 2, 2, 3, 3]这样的list,不能解答出正确的答案。

这个问题:可以用递归解题,也可以用动态规划解题,黄哥用这样的思路解一下,供初学者参考!

解题思路:

      1、如果sum(list) 是奇数,就不能将list拆分为2个和相等的list

      2、如果sum(list)之和为偶数,就 sub_sum = sum(list)/2

      2、列出所有可能的子集(子list)

      3、判断子集是不是和 sub_sum相等,如果相等则可以拆分为2个和相等的list,

         否则不可以

本文由黄哥python培训,黄哥所写

黄哥python培训试看视频播放地址

https://github.com/pythonpeixun/article/blob/master/python_shiping.md

"""

import itertools

def get_all_subset(lst):

    """求list 所有子集合"""

    tmp_lst = []

    length = len(lst)

    for i in xrange(1, length):

        tmp_lst += (set(itertools.combinations(lst, i)))

    return tmp_lst

def sameSums(int_list):

    """黄哥python培训 黄哥所写 qq:1465376564

    >>> sameSums([4, 7, 6, 3])

    True

    >>> sameSums([3, 3])

    True

    >>> sameSums([4, 12, 16])

    True

    >>> sameSums([5, 1])

    False

    """

    sum_of_lsit = sum(int_list)

    sub_sum = sum_of_lsit / 2

    if sum_of_lsit % 2:

        return False

    all_subset = get_all_subset(int_list)

    for item in all_subset:

        if sum(item) == sub_sum:

            return True

    return False

if __name__ == "__main__":

    import doctest

    doctest.testmod()

    lst1 = [3, 9, 10, 30, 8]

    lst2 = [4, 5, 6, 7, 8]

    lst3 = [2, 2, 2, 3, 3]

    print sameSums(lst1)

    print sameSums(lst2)

    print sameSums(lst3)


© 著作权归作者所有

黄哥Python培训
粉丝 39
博文 21
码字总数 14219
作品 0
海淀
私信 提问
运维如何通过学习python学会编程

运维如何通过学习python学会编程 运维必须懂开发,特别是python开发,已经形成大家的共识,不懂开发的运维,路会越走越窄。 黄哥,从2012年底,从事python教学过程中,接触到很多运维的朋友。...

黄哥Python培训
2016/03/01
228
0
如何捅破python编程的那层纸

如何捅破python编程的那层纸 一些朋友自学python过程中,发现书也能看懂,书上的玩具代码也能看懂,但为啥自己不能做习题,不能写代码解决问题,自己不能动手写代码?原因是初学者没有学会计...

黄哥Python培训
2015/02/10
1K
0
如何捅破python编程的那层纸之二

如何捅破python编程的那层纸之二 # coding:utf-8 """ 如何捅破python编程的那层纸之二 贴吧上有人问 定义一个函数,名字为sameSums(aList),alist是一个整形list(限定重复元素不超过2个,排除...

黄哥Python培训
2015/07/22
161
0
黄哥通过代码来说明:python语法糖

下面用一个例子来说明: #coding:utf-8 """ foo = decorator(foo) 语句的作用是将foo函数作为参数传递到decorator 返回值赋值给foo ,那么foo不再是原来的函数了 为了简化代码,python添加了...

黄哥Python培训
2015/11/13
453
0
Python3.7最新版本使用说明书,请你保管好!

以下是对Python官网内容的翻译 需要注意的是目前这个版本是Python3.7预计发布的四个预览版本之三。 Python Release Python 3.7.0b3 Python数据类 Python生成器异常处理 在Python 3.7中,生成...

糖宝lsh
2018/12/28
36
1

没有更多内容

加载失败,请刷新页面

加载更多

Experts say the weaker pound is drawing investors to the UK tech sector

UK tech companies secured a record £5.5bn in foreign investment in the first seven months of this year, research shows. This was more than the amount invested per capita in th......

wowloop
30分钟前
5
0
Add support for Android 9-patch images in BorderImage

The 9-patch image implementation in Qt Quick Controls 1 is an internal implementation detail of the Android style. It cannot handle .9.png image files out of the box, but takes ......

shzwork
35分钟前
4
0
c/c++日期时间处理函数小结

日期时间处理函数: 日期时间转为字符串 strftime/std::put_time 字符串解析成日期时间 strptime/std::get_time 时间结构转换:time_t->tm localtime:time_t->tm 时间结构转换:tm->time_t ...

chuqq
39分钟前
5
0
Apache Flink 进阶入门(二):Time 深度解析

前言 Flink 的 API 大体上可以划分为三个层次:处于最底层的 ProcessFunction、中间一层的 DataStream API 和最上层的 SQL/Table API,这三层中的每一层都非常依赖于时间属性。时间属性是流处...

大涛学长
40分钟前
4
0
创龙基于Xilinx Artix-7系列FPGA处理器

SOM-TLA7是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板,可配套广州创龙Artix-7开发板使用。核心板尺寸仅70mm*50mm,采用沉金无铅工艺的10层板设计,专业的PCB Layout保证信号...

Tronlong创龙
46分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部