• 自主学习进度2


    最近模块2和3的学习不是太容易

    Python强大的一个原因是它有非常强大的第三方库,另外还有一个原因是Python语言本身的简单、明确和优雅,特别是学过其他编程语言的小伙伴应该更有感触,Python语法和各种数据结构等太简单便捷了,所以在解决问题时要尽量考虑用Python化的思想来写程序,提高自己的编程效率。在“字典和集合编程示例介绍”视频中有3个例子大家可以好好体会,下面再以一个我上课时用的例子给大家简单分析一下。

    【程序功能】

    寻找字符串中包含的所有数字的朋友数字,朋友数字即数值之和相同的数字字符串例如134和224,并将各朋友数字组存入同一列表中,同一组朋友数字需按数字字符的顺序从小到大排列,多个数字朋友组则按数值之和从小到大顺序排列。

    【测试数据与运行结果】

    输入:

    143,267,342,562,224,134,276,252

    输出:

    ['134', '143', '224']

    ['252', '342']

    ['562']

    ['267', '276']

    对于这个问题定义一个处理函数,其思路可以考虑如下:

    1. 处理数据:用字符串的split()方法将数字字符分隔后存如列表中,如果想转换成int类型可以用map()函数辅助处理;

      s = s.split(',')

    2. 统计:利用Python中for循环简洁有效的序列项迭代思路遍历每一个数字字符,并对每一个数字字符进行和的计算,这里用一个for循环即可;

      for num in s:    sumNum = sum(map(int, num)

    3. 保存统计结果:因为同一个数字和可能对应多个数字字符串,所以可以利用字典的映射特征将结果存入字典中;

      d, result = {}, [] for 循环内:       ...    d[sumNum] = d.get(sumNum, []) + [num]

    4.  排序:注意此处有两个排序,一是基于数字和排序,二是同一数字和各数字的排序,此处应考虑多用Python提供的函数。针对测试数据,字典d中的数据形如:

      {8: ['143', '224', '134'], 15: ['267', '276'], 9: ['342', '252'], 13: ['562']}

      基于数字和的排序可以使用sorted()函数:

      lst = sorted(d.items())   # key为默认值lambda d: d[0],可以不写排序完后lst中的结果形如:

      [(8, ['143', '224', '134']), (9, ['342', '252']), (13, ['562']), (15, ['267', '276'])]

      要接着对每一个值(多个列表)进行排序,此处可以显式地使用循环语句,更Python化的方法是使用隐射函数map(),将sorted函数作用在lst的每一个键对应的值上,可用如下代码:

      result = map(sorted, [x[1] for x in lst] )这样实现更便捷。最后函数将结果返回即可。在主模块中输入s并传递给形参s,调用函数用*对返回的map对象进行解包用print输出即可得到最终的结果。

      print(*result, sep=' ')

    通过如上这个例子大家是不是进一步理解了Pythonic的编程思想了呢?在日常的使用中一定要多多去思考和使用,也可以多掌握一些标准库的使用,例如假设要判断某一个字符是否是字母,除了借助内建的函数/方法和ASCII值得转换外还可以借助string模块来完成:

    >>> import string

    >>> dir(string) ['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

    >>> 'c' in string.ascii_letters

    True

  • 相关阅读:
    【Nginx】Nginx性能优化及配置文件
    【算法】常见算法分类和思想
    【PHP】php位运算及其高级应用
    【数据结构】数据结构-图的基本概念
    【Redis】Redis缓存穿透解决方案之布隆过滤器
    【Linux】Linux系统5种IO模型
    【linux】/dev/null作用和/dev/random
    【Linux】Linux查找功能
    【算法】算法复杂度
    Docker Hub公共镜像仓库的使用
  • 原文地址:https://www.cnblogs.com/Cute-pig/p/15456407.html
Copyright © 2020-2023  润新知